Ir al contenido

Chocolatey

Chocolatey es un gestor de paquetes de Windows que automatiza la instalación, actualización y configuración de software. Gestiona paquetes directamente desde PowerShell o Command Prompt.

Instalación

Inicializar Chocolatey

# Ejecutar PowerShell como Administrador, luego:
Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
  [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Verificar instalación
choco --version

Usando Windows Package Manager (Alternativa)

winget install Chocolatey.Chocolatey

Comandos Básicos

ComandoDescripción
choco --versionMostrar versión de Chocolatey
choco --helpMostrar ayuda general
choco help <command>Obtener ayuda de un comando específico
choco listListar todos los paquetes instalados
choco search <package>Buscar un paquete
choco install <package>Instalar un paquete
choco upgrade <package>Actualizar un paquete
choco uninstall <package>Desinstalar un paquete

Comandos de Instalación

# Instalar paquete individual
choco install notepadplusplus

# Instalar múltiples paquetes
choco install git nodejs python

# Instalar con versión específica
choco install git --version=2.35.1

# Instalar sin confirmación
choco install git -y

# Instalar en directorio específico
choco install git --install-arguments="'INSTALLDIR=C:\Git'"

# Instalar con parámetros
choco install nodejs --params="'/InstallDirectory:C:\nodejs'"

# Instalar desde paquete local
choco install ./localpackage.nupkg

# Instalar desde fuente personalizada
choco install package -s https://custom-feed.com

Búsqueda y Descubrimiento

# Buscar paquetes
choco search docker

# Buscar con información detallada
choco search nodejs --verbose

# Listar todos los paquetes en repositorio remoto
choco list --page=0 --page-size=50

# Buscar solo paquetes locales
choco list --local-only

# Buscar con indicador de solo aprobados
choco search vim --approve-only

Gestión de Paquetes

# Listar paquetes instalados
choco list

# Listar instalados con versión
choco list --local-only

# Listar paquetes desactualizados
choco outdated

# Obtener información de paquete específico
choco info python

# Mostrar dependencias del paquete
choco depends git

# Fijar paquete (prevenir actualizaciones)
choco pin add -n git

# Desfijar paquete
choco pin remove -n git

Operaciones de Actualización

# Actualizar paquete individual
choco upgrade git

# Actualizar múltiples paquetes
choco upgrade nodejs python ruby

# Actualizar todos los paquetes
choco upgrade all

# Actualizar sin confirmación
choco upgrade all -y

# Actualizar a versión específica
choco upgrade git --version=2.35.1

# Actualizar con parámetros
choco upgrade nodejs --params="'/SILENT'"

# Actualizar excluyendo paquetes específicos
choco upgrade all --except="git,nodejs"

Desinstalación y Limpieza

# Desinstalar paquete individual
choco uninstall notepadplusplus

# Desinstalar múltiples paquetes
choco uninstall git nodejs -y

# Desinstalar con dependencias
choco uninstall packagename --remove-dependencies

# Desinstalar forzadamente incluso si hay errores
choco uninstall git -f -y

# Listar caché de paquetes
choco cache list

# Limpiar todo el caché
rm $env:ChocolateyInstall\cache\*.nupkg

Configuración

# Mostrar configuración
choco config list

# Establecer valor de configuración
choco config set cacheLocation D:\ChocolateyCache

# Establecer proxy
choco config set proxyLocation http://proxy.company.com:8080

# Establecer usuario de proxy
choco config set proxyUser username

# Establecer confirmación predeterminada
choco config set confirmAll true

# Permitir confirmación global
choco feature enable -n useRememberedArgumentsForUpgrades

Gestión de Fuentes

# Listar fuentes
choco source list

# Agregar fuente
choco source add -n=custom -s=https://my-nuget-feed.com

# Eliminar fuente
choco source remove -n=custom

# Deshabilitar fuente
choco source disable -n=custom

# Habilitar fuente
choco source enable -n=custom

# Establecer prioridad (el orden importa para la resolución)
choco source list --verbose

Características Avanzadas

Gestión de Características

# Listar características
choco feature list

# Habilitar característica
choco feature enable -n=caskNuget

# Deshabilitar característica
choco feature disable -n=caskNuget

# Características comunes
choco feature list  # Muestra: exitOnRebootDetected, autoUninstaller, etc.

Exportar e Importar Paquetes

# Exportar paquetes instalados
choco export packages.config

# Obtener lista de paquetes como comando
choco list | Select-Object -Property Name > packages.txt

# Convertir lista a comando de instalación
Get-Content packages.txt | ForEach-Object { "choco install $_ -y" }

# Crear packages.config e importar
# Crear manualmente packages.config, luego:
choco install packages.config -y

Procesamiento por Lotes

# Instalar todos los paquetes de archivo
$packages = @("git", "nodejs", "python", "vscode", "7zip")
foreach ($package in $packages) {
    choco install $package -y
}

# Actualizar todos con filtro
choco upgrade all -y --except="dotnet-core,java"

# Desinstalar con filtro
Get-Item "$env:ProgramFiles\*" |
  Where-Object { $_.Name -match "OldApp" } |
  ForEach-Object { choco uninstall $_.Name -y }

Ejemplos Comunes de Paquetes

# Herramientas de Desarrollo
choco install git nodejs python vscode visualstudio2022community

# Utilidades
choco install 7zip winrar notepadplusplus vlc

# Navegadores
choco install googlechrome firefox edge

# Comunicación
choco install discord slack

# Medios
choco install ffmpeg imagemagick

# Máquinas Virtuales
choco install virtualbox docker-desktop

# Herramientas del Sistema
choco install sysinternals ccleaner everything

# Lenguajes
choco install golang rust ruby php

Ejemplos de Scripting

Script PowerShell para Instalar Entorno de Desarrollo

# dev-setup.ps1
param(
    [switch]$SkipConfirm
)

$packages = @(
    "git",
    "nodejs",
    "python",
    "vscode",
    "docker-desktop",
    "postman",
    "dbeaver",
    "mingw"
)

Write-Host "Installing development packages..."

if ($SkipConfirm) {
    foreach ($package in $packages) {
        choco install $package -y
    }
} else {
    foreach ($package in $packages) {
        choco install $package
    }
}

Write-Host "Development environment setup complete!"

Script de Actualización Programada

# update-packages.ps1 (Ejecutar vía Task Scheduler)
$logFile = "C:\Logs\choco-update.log"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

Add-Content -Path $logFile -Value "$timestamp - Starting package update"

try {
    choco upgrade all -y --limit-output
    Add-Content -Path $logFile -Value "$timestamp - Update successful"
} catch {
    Add-Content -Path $logFile -Value "$timestamp - Update failed: $_"
}

Resolución de Problemas

Limpiar Caché Corrupto

# Detener todos los procesos de choco
Stop-Process -Name "chocolatey*" -Force

# Limpiar directorio de caché
Remove-Item "$env:ChocolateyInstall\cache\*" -Force

# Reinstalar paquete problemático
choco install packagename -f -y

Corregir Problemas de Instalación

# Restablecer entorno de Chocolatey
$env:ChocolateyInstall = 'C:\ProgramData\chocolatey'
$env:Path = "$env:ChocolateyInstall\bin;$env:Path"

# Corregir permisos
icacls "C:\ProgramData\chocolatey" /grant:r "$env:username`:F" /t

# Verificar instalación
choco --version

Problemas de Proxy

# Establecer proxy
choco config set proxyLocation http://proxy:8080
choco config set proxyUser username
choco config set proxyPassword password

# Probar conexión
choco search chocolatey -s http://chocolatey.org

Mejores Prácticas

Cronograma de Mantenimiento

# Semanalmente: Verificar paquetes desactualizados
choco outdated

# Mensualmente: Actualización completa del sistema
choco upgrade all -y

# Trimestralmente: Limpiar caché de paquetes
rm $env:ChocolateyInstall\cache\*.nupkg

Recomendaciones de Seguridad

  • Mantener Chocolatey actualizado: choco upgrade chocolatey -y
  • Verificar fuentes de paquetes de repositorios confiables
  • Usar la marca -f (force) con precaución
  • Actualizar regularmente todos los paquetes: choco upgrade all
  • Usar Windows Defender para escaneo de malware

Optimización de Rendimiento

# Deshabilitar Windows Update durante operaciones de paquetes
# Reducir problemas de bloqueo del explorador

# Usar ejecución paralela de PowerShell para múltiples paquetes:
@("git", "nodejs", "python") |
  ForEach-Object -Parallel {
    choco install $_ -y
  } -ThrottleLimit 3

Integración con CI/CD

Ejemplo de GitHub Actions

name: Setup Windows Environment
jobs:
  setup:
    runs-on: windows-latest
    steps:
      - name: Install Chocolatey packages
        run: |
          choco install git nodejs python -y
          choco upgrade all -y

Pipeline de Azure DevOps

jobs:
  - job: SetupEnvironment
    pool:
      vmImage: 'windows-latest'
    steps:
      - script: choco install git python nodejs -y
        displayName: Install packages

Recursos


Última actualización: 2025-03-30