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
| Comando | Descripción |
|---|---|
choco --version | Mostrar versión de Chocolatey |
choco --help | Mostrar ayuda general |
choco help <command> | Obtener ayuda de un comando específico |
choco list | Listar 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
- Sitio Oficial de Chocolatey
- Repositorio de Paquetes
- Documentación
- Foro de Comunidad
- Repositorio de GitHub
Última actualización: 2025-03-30