En un VPS Windows nuevo, instalar manualmente Git, 7-Zip, las herramientas Sysinternals y cada dependencia lleva tiempo y produce servidores ligeramente distintos entre sí. Chocolatey permite describir esos programas, instalarlos de forma silenciosa, detectar los obsoletos y reproducir la misma base en otro VPS.
El interés no está, por tanto, en memorizar diez comandos choco. El verdadero tema es la explotación:
- cómo instalar Chocolatey sin ejecutar a ciegas un script descargado;
- cómo definir un estado de software reproducible;
- cómo controlar las actualizaciones y los reinicios;
- cómo saber quién creó el paquete que ejecutará PowerShell como administrador;
- cuándo sustituir el repositorio comunitario por uno interno;
- qué aportan realmente las ediciones de pago.
Método, alcance y límites
Los procedimientos se verificaron el 31 de agosto de 2026 en la documentación oficial de Chocolatey CLI, del repositorio comunitario de Chocolatey, de Chocolatey Software y de Microsoft PowerShell.
Chocolatey CLI 2.x requiere .NET Framework 4.8. El instalador intenta instalarlo si falta, pero esa operación puede exigir un reinicio. Esta guía se dirige a versiones mantenidas de Windows Server y a una consola de PowerShell abierta como administrador.
Un paquete comunitario, su mantenedor, su script o la URL del software subyacente pueden cambiar después de la publicación. Para un uso profesional, valide la versión exacta en un entorno de prueba y publíquela después en una fuente que usted controle. Los precios y funciones citados también cambian: compruébelos en las páginas oficiales en el momento de decidir.
Esta guía no sustituye a las licencias del software instalado, a una política de gestión de vulnerabilidades, a Windows Update, a una copia de seguridad o un procedimiento de reconstrucción, a la cualificación aplicativa antes de actualizar, ni a los controles de EDR, antivirus, proxy y cortafuegos de su organización.
1. Qué gestiona Chocolatey y qué no
Chocolatey es un gestor de paquetes para Windows. Un paquete .nupkg es un archivo basado en el formato NuGet. Contiene metadatos .nuspec y puede contener scripts de PowerShell como chocolateyInstall.ps1, chocolateyBeforeModify.ps1 o chocolateyUninstall.ps1.
Un paquete puede incorporar el software si los derechos de redistribución lo permiten, descargar un MSI, un EXE o un archivo comprimido desde el sitio del editor, verificar su suma de comprobación, lanzar la instalación silenciosa, crear accesos directos de comando llamados shims, declarar dependencias y ejecutar operaciones de configuración.
Esta distinción es esencial:
| Elemento | Responsable |
|---|---|
| el software en sí | el editor del software |
| el paquete comunitario de Chocolatey | uno o varios mantenedores, a veces ajenos al editor |
| repositorio comunitario y moderación | Chocolatey Software y sus servicios de validación |
| decisión de autorizar el paquete | su organización |
| repositorio interno y promoción de versiones | su equipo de explotación |
Chocolatey gestiona ante todo el estado de sus propios paquetes. Con la edición Open Source, un software actualizado o eliminado fuera de Chocolatey puede provocar una divergencia entre el estado de Windows y el del paquete. Las ediciones con licencia ofrecen una sincronización con Programas y características, pero esa función no exime de vigilar el estado real del servidor.
Chocolatey no sustituye a Windows Update
Use Windows Update para el sistema, los componentes de Microsoft y los parches del sistema operativo. Use Chocolatey para el software y las herramientas que haya decidido gestionar como paquetes. Un paquete comunitario con el nombre de una actualización de Windows no debe convertirse en un sustituto automático de su política de parches de Microsoft.
2. Modelo de confianza en un servidor
Una instalación de Chocolatey combina varios eslabones:
- el script de instalación de Chocolatey;
- el cliente
chocoinstalado; - el repositorio configurado;
- el paquete y sus scripts;
- el servidor desde el que el paquete descarga eventualmente el software;
- el instalador del editor;
- las dependencias del paquete.
Una conexión HTTPS protege el transporte y autentica el servidor remoto según la cadena de certificados. No demuestra que un script cumpla su política ni que su comportamiento siga siendo adecuado para su entorno.
En un VPS, los scripts se ejecutan por lo general con derechos de administrador. Un paquete puede, por tanto, modificar servicios, el registro, variables de entorno, tareas programadas y archivos del sistema. Trate cada fuente como un proveedor de código privilegiado.
Tres niveles de uso
| Nivel | Fuente | Gestión recomendada |
|---|---|---|
| prueba personal | repositorio comunitario | revisión del paquete e instalación puntual |
| parque profesional pequeño | repositorio interno, importación manual | versiones aprobadas, manifiesto y registro de cambios |
| parque industrializado | repositorios de prueba y producción, automatización | internalización, CI, pruebas, aprobación, auditoría y despliegue central |
3. Preparar el VPS
Conéctese por RDP o por su canal de administración habitual. Si el VPS acaba de entregarse, empiece por nuestra guía de primeros pasos con su VPS Windows.
Antes de Chocolatey: instale las actualizaciones de Windows, reinicie si hace falta, compruebe la hora y la resolución DNS, compruebe el acceso HTTPS saliente, abra PowerShell como administrador y cree una instantánea de precaución si la plataforma lo permite.
Recogida inicial:
Get-ComputerInfo |
Select-Object WindowsProductName, WindowsVersion,
OsBuildNumber, OsArchitecture
$PSVersionTable |
Format-List PSVersion, PSEdition, CLRVersion
Get-ExecutionPolicy -List
[System.Net.ServicePointManager]::SecurityProtocol
Test-NetConnection community.chocolatey.org -Port 443 La instantánea facilita deshacer una modificación del sistema, pero no sustituye a una copia externa. Una actualización de software también puede modificar datos aplicativos que la vuelta a la instantánea haría retroceder.
4. Instalar Chocolatey con el método oficial
La página de instalación oficial propone este comando de PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString(
"https://community.chocolatey.org/install.ps1"
)) El ámbito Process limita el cambio de la directiva de ejecución a la consola actual. El número 3072 corresponde a TLS 1.2 en las versiones de .NET implicadas.
Este comando es oficial, pero descarga y ejecuta código de inmediato. Chocolatey pide él mismo inspeccionar install.ps1 antes de usarlo. Para una práctica coherente con nuestra guía de fortalecimiento, que desaconseja ejecutar un script descargado sin leerlo, prefiera el procedimiento siguiente.
5. Descargar el script, leerlo y después ejecutarlo
Cree un directorio de trabajo y descargue el script sin ejecutarlo:
$BootstrapDirectory = "C:\Windows\Temp\Chocolatey-Bootstrap"
$InstallScript = Join-Path $BootstrapDirectory "install.ps1"
$InstallUri = "https://community.chocolatey.org/install.ps1"
New-Item -Path $BootstrapDirectory -ItemType Directory -Force |
Out-Null
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
$DownloadParameters = @{
Uri = $InstallUri
UseBasicParsing = $true
OutFile = $InstallScript
}
Invoke-WebRequest @DownloadParameters Compruebe el archivo:
Get-Item $InstallScript |
Format-List FullName, Length, CreationTimeUtc,
LastWriteTimeUtc
Get-FileHash -Path $InstallScript -Algorithm SHA256
Get-Content -Path $InstallScript También puede abrirlo en el Bloc de notas:
notepad.exe $InstallScript Qué buscar durante la revisión
Compruebe en particular la URL desde la que se descarga el paquete de Chocolatey, las variables de entorno consultadas, las rutas creadas, las modificaciones de PATH, las descargas o ejecutables secundarios, las llamadas dinámicas de PowerShell, y la ausencia de destinos o comandos inesperados.
La suma SHA-256 registrada demuestra que se revisó y ejecutó el mismo archivo. No autentica el script por sí sola mientras no se compare con un valor publicado por un canal independiente. La verificación HTTPS y la revisión del contenido siguen siendo necesarias.
Tras la validación interna, ejecute el archivo local:
Set-ExecutionPolicy Bypass -Scope Process -Force
& $InstallScript
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
$env:Path += ";$env:ProgramData\chocolatey\bin"
}
choco --version No se ha rebajado la directiva de ejecución permanente de la máquina. Cerrar la consola elimina el Bypass definido en el ámbito Process.
Para una automatización profesional
No vuelva a descargar en silencio la versión actual de install.ps1 cada vez que cree un servidor. Tras la validación:
- archive el script aprobado o el MSI oficial en su repositorio de artefactos;
- registre su SHA-256 y la versión de Chocolatey;
- apunte el bootstrap hacia esa copia interna;
- valide una versión nueva antes de reemplazar la anterior;
- retire la fuente comunitaria de los servidores de producción si no es necesaria.
Chocolatey ofrece también un MSI desde la versión 2.0.0. La documentación precisa que ese MSI sirve para el bootstrap: instala Chocolatey, pero no actualiza ni desinstala el cliente.
6. Comprobar la instalación
La ruta predeterminada es C:\ProgramData\chocolatey. Chocolatey indica que allí los permisos están endurecidos para los administradores. Si elige otra ubicación con ChocolateyInstall, la documentación le pide gestionar usted mismo las ACL.
choco --version
choco source list
choco config list
choco feature list
Get-Command choco |
Format-List Name, Source, Version
Get-ChildItem $env:ChocolateyInstall
Get-Acl $env:ChocolateyInstall |
Format-List Owner, AccessToString Compruebe como mínimo:
| Control | Resultado esperado |
|---|---|
choco --version | un número de versión, sin error |
| comando resuelto | binario dentro del directorio de Chocolatey |
| carpeta de instalación | con escritura solo para las identidades previstas |
| fuente comunitaria | presente solo si su política lo permite |
| registro | C:\ProgramData\chocolatey\logs\chocolatey.log |
No haga C:\ProgramData\chocolatey modificable por un usuario estándar: podría reemplazar un shim, un script o un paquete que después se ejecute con privilegios elevados. Nuestra guía para configurar el firewall de Windows Server en un VPS completa este endurecimiento por el lado de la red.
7. Entender quién publica los paquetes comunitarios
El repositorio community.chocolatey.org contiene paquetes creados por miembros de la comunidad. El mantenedor del paquete no es necesariamente el editor del software. La FAQ del repositorio comunitario distingue explícitamente el soporte del paquete, a cargo de sus mantenedores, del soporte del software, a cargo de su editor.
Desde octubre de 2014, cada versión de cada paquete enviado pasa por un proceso de moderación antes de publicarse. Según la documentación de seguridad de Chocolatey y la documentación de moderación, ese proceso puede incluir una validación automática de calidad, una verificación de instalación y desinstalación, un análisis con VirusTotal, una revisión humana para los paquetes sin estado de confianza, y controles de procedencia y suma de comprobación de los binarios.
Un paquete «trusted» puede aprobarse tras los controles automáticos sin una nueva revisión humana si nada se señala. La moderación reduce el riesgo; no convierte un repositorio comunitario en una fuente bajo su control.
Chocolatey indica además que su escáner de paquetes solo prueba por defecto los instaladores en-US. Un paquete puede funcionar en el entorno de verificación y fallar con otro idioma, otra arquitectura, un proxy, un reinicio pendiente o una configuración de servidor particular.
Verificar un paquete antes de instalarlo
Empiece por los metadatos:
choco info 7zip
choco info git
choco info sysinternals En la página del paquete, compruebe la identidad de los mantenedores, el enlace al código fuente del paquete, el estado de validación, verificación y análisis, el historial de versiones, la sección Files, el archivo chocolateyInstall.ps1, las URL descargadas, las sumas declaradas, las dependencias, y los parámetros y argumentos silenciosos.
La FAQ oficial explica que el archivo .nupkg puede descargarse, renombrarse a .zip y extraerse para inspeccionarlo. Examine el paquete exacto, no solo la rama principal de su repositorio de origen: la rama puede haber cambiado desde la publicación de la versión.
Lo que VirusTotal no garantiza
Un resultado sin detecciones no es prueba de inocuidad. No valida la lógica de PowerShell, la intención del mantenedor, el cumplimiento de licencias ni el comportamiento futuro de una URL remota. La protección antimalware en tiempo de ejecución de las ediciones Pro y Business afecta a los archivos descargados desde una fuente externa durante la instalación; Chocolatey precisa que los binarios incrustados directamente en un paquete no son analizados por esa función en ese momento.
8. Instalar herramientas sin convertir el servidor en un puesto de trabajo
En un servidor, cada software aumenta la superficie de mantenimiento. Instale solo las herramientas necesarias para el papel del VPS.
Ejemplo de instalación explícita con control de cada resultado:
$PackageIds = @(
"7zip",
"git",
"sysinternals"
)
foreach ($PackageId in $PackageIds) {
& choco install $PackageId --yes --no-progress
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Instalacion de $PackageId fallida: codigo $InstallCode"
}
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "$PackageId instalado; se requiere reinicio."
}
}
choco list Los códigos 1641 y 3010 significan respectivamente éxito con reinicio iniciado y éxito con reinicio requerido. De hecho, Chocolatey define 0, 1605, 1614, 1641 y 3010 como códigos de salida válidos. Un script que trate todo código distinto de cero como un fallo declararía erróneamente algunas instalaciones como erróneas.
No use --force por defecto. La documentación de comandos de Chocolatey explica que esa opción esquiva comportamientos de protección y la desaconseja en los scripts ordinarios.
9. Hacer reproducible la instalación
Una serie de comandos copiada del historial de PowerShell todavía no es una configuración reproducible. Hay que conservar el identificador exacto del paquete, la versión validada, la fuente autorizada, los parámetros del paquete, los argumentos pasados al instalador, el código de retorno, la necesidad de reinicio y una prueba funcional tras la instalación.
Exportar el estado de un VPS de referencia
El comando choco export crea un archivo packages.config. En una máquina de referencia ya validada:
$ManifestDirectory = "C:\Ops\Chocolatey"
$ManifestPath = Join-Path $ManifestDirectory "packages.config"
New-Item -Path $ManifestDirectory -ItemType Directory -Force |
Out-Null
choco export $ManifestPath --include-version-numbers
Get-Content $ManifestPath Coloque ese manifiesto en su repositorio de configuración con una revisión de código, un número de cambio, la fecha de validación, el entorno de prueba y la fuente interna correspondiente.
No considere la exportación una copia de seguridad completa. No captura necesariamente los parámetros de cada instalación, los ajustes aplicativos, los secretos, los datos ni el software instalado fuera de Chocolatey.
Reproducir el manifiesto
En un VPS nuevo:
$ManifestPath = "C:\Ops\Chocolatey\packages.config"
$ApprovedSource = "internal-production"
if (-not (Test-Path $ManifestPath)) {
throw "Manifiesto Chocolatey no encontrado: $ManifestPath"
}
$Arguments = @(
"install",
$ManifestPath,
"--source=$ApprovedSource",
"--yes",
"--no-progress"
)
& choco @Arguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Bootstrap de software fallido: codigo $InstallCode"
} No confundir versiones fijadas con mantenimiento
Una versión fijada hace previsible una reconstrucción, pero también puede conservar una vulnerabilidad. El ciclo correcto es:
- detectar una versión nueva;
- importar el paquete y sus recursos;
- revisar los cambios;
- probar la instalación, la actualización y el reinicio;
- promover la versión;
- modificar el manifiesto;
- desplegar por oleadas;
- conservar la versión anterior durante la ventana de vuelta atrás.
10. Actualizar el software sin un «upgrade all» a ciegas
Mostrar los paquetes obsoletos:
choco outdated Actualizar un paquete concreto tras la validación:
choco upgrade git -y --no-progress
$UpgradeCode = $LASTEXITCODE
if ($UpgradeCode -notin @(0, 1641, 3010)) {
throw "Actualizacion de Git fallida: codigo $UpgradeCode"
} Actualizar a una versión aprobada:
$ApprovedVersion = "VERSION_VALIDADA"
$UpgradeArguments = @(
"upgrade",
"git",
"--version=$ApprovedVersion",
"--source=internal-production",
"--yes",
"--no-progress"
)
& choco @UpgradeArguments El valor VERSION_VALIDADA es deliberadamente un marcador: sustitúyalo por la versión realmente cualificada y disponible en su repositorio.
Por qué evitar una actualización global automática en producción
El comando siguiente existe:
choco upgrade all -y Puede ser aceptable en una máquina de prueba o en un puesto no crítico. En un VPS de producción, puede actualizar a la vez un entorno de ejecución, una herramienta usada por un servicio, una dependencia y el propio Chocolatey. Si algo falla, aislar el origen de la regresión resulta más difícil.
Prefiera una ventana de mantenimiento, una instantánea de precaución, una lista de versiones aprobadas, actualizaciones por lotes coherentes, pruebas aplicativas, un reinicio controlado y un despliegue progresivo en varios servidores.
La documentación de Chocolatey señala además que una actualización global puede dejar dependencias en un estado incoherente si parte de la cadena falla. Empiece entonces por el paquete o la dependencia citados explícitamente en el error.
Fijar temporalmente un paquete
choco pin add --name=git
choco pin list
choco pin remove --name=git Un pin es una medida temporal, no una estrategia de seguridad. Asócielo a un motivo, un ticket, un responsable y una fecha de revisión.
11. Generar un informe de actualización sin modificar el servidor
Para una supervisión sencilla, active los códigos de salida enriquecidos:
choco feature enable --name=useEnhancedExitCodes Con esa función, choco outdated devuelve:
| Código | Significado |
|---|---|
| 0 | ningún paquete obsoleto |
| 2 | al menos un paquete obsoleto |
| 1 o -1 | se ha producido un error |
Script de auditoría, sin instalación:
$AuditDirectory = "C:\Ops\Chocolatey\Reports"
$Timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$ReportPath = Join-Path $AuditDirectory "outdated-$Timestamp.txt"
New-Item -Path $AuditDirectory -ItemType Directory -Force |
Out-Null
$Output = & choco outdated --limit-output 2>&1
$ExitCode = $LASTEXITCODE
$Output | Set-Content -Path $ReportPath -Encoding UTF8
switch ($ExitCode) {
0 {
Write-Output "No se detectaron actualizaciones de Chocolatey."
}
2 {
Write-Warning "Hay actualizaciones disponibles: $ReportPath"
}
default {
throw "Auditoria de Chocolatey fallida: codigo $ExitCode"
}
} Programe esta comprobación con su herramienta de supervisión, una GPO, un planificador o una tarea de Windows. No convierta automáticamente ese informe en un upgrade all sin validación.
12. Por qué una empresa debería usar su propio repositorio
Chocolatey Software escribe explícitamente que una organización no debería usar directamente el repositorio comunitario como fuente de producción. Su guía de internalización automatizada da tres razones:
- confianza: los creadores y mantenedores externos no están bajo el control de la organización;
- estabilidad: los paquetes y las descargas deben seguir disponibles durante las operaciones;
- control: las pruebas, la aprobación y la publicación deben pertenecer a la organización.
Un repositorio privado permite además conservar las versiones realmente desplegadas, dejar de depender de una URL de editor modificada o suprimida, reducir los dominios de Internet autorizados desde los VPS, cualificar un binario antes de difundirlo, crear sus propios paquetes de configuración, funcionar en una red aislada, separar importación, prueba y producción, y asociar cada promoción a una revisión y un cambio.
Arquitectura recomendada
| Etapa | Función |
|---|---|
| repositorio comunitario o del editor | origen externo, nunca consumido directamente por producción |
| internalización | obtención del paquete y sus recursos |
| repositorio Git | scripts, manifiestos, sumas y historial de revisión |
| repositorio Chocolatey de prueba | instalación en un servidor representativo |
| controles | antivirus, firmas, sumas, pruebas funcionales y reinicio |
| repositorio Chocolatey de producción | únicamente versiones aprobadas |
| VPS | acceso de lectura al repositorio de producción |
Para los clientes, use una identidad de solo lectura. Reserve el derecho de publicar a la CI o a una identidad distinta. No coloque nunca un token de publicación en el script de bootstrap de un VPS.
Repositorios compatibles
La documentación de Chocolatey cita Inedo ProGet, Sonatype Nexus Repository, JFrog Artifactory, una fuente NuGet compatible y, en algunos casos, un recurso compartido interno.
El antiguo producto Chocolatey.Server está obsoleto. Chocolatey recomienda migrar a una solución de terceros y cita ProGet, Nexus o Artifactory. No inicie, por tanto, un proyecto nuevo en torno a Chocolatey.Server.
¿Open Source o Business para el repositorio interno?
La edición Open Source sabe consumir varias fuentes, crear paquetes y usar un repositorio privado. También permite una internalización manual: descarga del paquete, obtención de los recursos, modificación de los scripts, nueva compilación y publicación.
Chocolatey for Business automatiza ese trabajo con Package Internalizer: el cliente descarga el paquete y sus recursos externos, reescribe las referencias y recompila un paquete utilizable sin acceso a Internet. La función ahorra tiempo, pero la decisión de aprobar y probar sigue siendo suya.
13. Configurar una fuente interna
Ejemplo con una fuente HTTPS ficticia:
$SourceArguments = @(
"source",
"add",
"--name=internal-production",
"--source=https://packages.example.net/nuget/chocolatey/v2",
"--priority=1"
)
& choco @SourceArguments
choco source list Una prioridad numérica más baja se evalúa antes que una más alta. Compruebe siempre el resultado con choco source list.
Tras confirmar que el repositorio interno contiene Chocolatey y todos los paquetes necesarios, desactive el repositorio comunitario:
choco source disable --name=chocolatey
choco source list Para un entorno totalmente aislado, la documentación de Chocolatey recomienda eliminar la fuente comunitaria:
choco source remove --name=chocolatey La desactivación es más fácilmente reversible; la eliminación evita que una reactivación no controlada reintroduzca la fuente. Elija según su gestión de configuración.
Autenticación y secretos
Chocolatey admite la autenticación por usuario y contraseña, así como certificados de cliente X.509. El comando source add cifra la contraseña en el archivo de configuración, pero un secreto transmitido en una línea de comandos puede ser visible por otros mecanismos de registro o inventario.
Buenas prácticas: use una cuenta técnica de solo lectura en los VPS, prefiera un token corto o un certificado de cliente si el repositorio lo permite, obtenga el secreto de una bóveda en el momento del despliegue, no lo coloque ni en Git, ni en packages.config, ni en la imagen plantilla, separe las identidades de lectura y publicación, y renueve los secretos probando su revocación.
14. Comparar las ediciones sin sobrevenderlas
Las funciones y los precios pueden cambiar. La tabla siguiente refleja las páginas oficiales Compare Chocolatey Editions y Pricing consultadas el 31 de agosto de 2026.
| Edición | Público destinatario | Qué aporta en esta guía | Límite que conviene conocer |
|---|---|---|---|
| Open Source | particulares y organizaciones | gestión de paquetes, creación de paquetes, varias fuentes, repositorio privado, actualización global | internalización y gobernanza avanzada por construir manualmente |
| Pro | una persona física, licencia nominativa | funciones Open Source más caché CDN, protección antimalware en ejecución, sincronización y funciones de comodidad | licencia personal y nominativa; hasta 8 máquinas personales |
| Business (C4B) | organizaciones | Package Internalizer, Central Management, auditoría, autoservicio, sincronización completa y funciones de despliegue | coste por nodo, infraestructura y procesos que explotar |
Precios mostrados el 31 de agosto de 2026
- Open Source: gratuita, sin límite de máquinas;
- Pro: 96 dólares al año, licencia personal nominativa, hasta 8 máquinas personales;
- Business: desde 18 dólares por licencia y año;
- la página de precios indica una suscripción anual Business desde 1 800 dólares al año, correspondiente a un mínimo de 100 nodos a 18 dólares por nodo y año, con descuentos por volumen a partir de 500 nodos.
Compruebe la página oficial en el momento de la compra. Impuestos, presupuestos, descuentos, soporte premium y condiciones contractuales pueden modificar el coste real.
Una elección razonable según el tamaño
| Situación | Elección a menudo suficiente |
|---|---|
| uno o pocos VPS, equipo capaz de mantener sus paquetes | Open Source con repositorio privado e importación manual |
| uso estrictamente personal | Open Source o Pro según las funciones deseadas |
| parque de empresa con importación frecuente de paquetes externos | Business, a evaluar por el Internalizer y la auditoría |
| necesidad de autoservicio para usuarios sin permisos de administrador | Business |
| necesidad de un panel central de conformidad | Business o una herramienta de gestión ya implantada |
Business no hace que los paquetes sean seguros por sí mismo. Facilita la internalización, el control central y la auditoría. Si la organización ya dispone de un repositorio NuGet, una CI, un EDR y una herramienta de configuración, la edición Open Source puede bastar para un ámbito pequeño correctamente explotado.
15. Script de bootstrap reproducible
El script siguiente no elige el software por usted. Exige un manifiesto existente, una fuente Chocolatey ya configurada, una URL de bootstrap aprobada y la suma SHA-256 esperada del script de instalación.
En una producción madura, BootstrapUri debe apuntar a su copia interna validada.
param(
[Parameter(Mandatory = $true)]
[string]$ManifestPath,
[Parameter(Mandatory = $true)]
[string]$SourceName,
[Parameter(Mandatory = $true)]
[string]$BootstrapUri,
[Parameter(Mandatory = $true)]
[ValidatePattern("^[A-Fa-f0-9]{64}$")]
[string]$ExpectedBootstrapSha256
)
$ErrorActionPreference = "Stop"
$BootstrapDirectory = "C:\Windows\Temp\Chocolatey-Bootstrap"
$BootstrapPath = Join-Path $BootstrapDirectory "install.ps1"
if (-not (Test-Path $ManifestPath)) {
throw "Manifiesto no encontrado: $ManifestPath"
}
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
New-Item -Path $BootstrapDirectory -ItemType Directory -Force |
Out-Null
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
$DownloadParameters = @{
Uri = $BootstrapUri
UseBasicParsing = $true
OutFile = $BootstrapPath
}
Invoke-WebRequest @DownloadParameters
$ActualHash = (
Get-FileHash -Path $BootstrapPath -Algorithm SHA256
).Hash
if ($ActualHash -ne $ExpectedBootstrapSha256) {
throw "Suma de comprobacion del bootstrap invalida."
}
Set-ExecutionPolicy Bypass -Scope Process -Force
& $BootstrapPath
$env:Path += ";$env:ProgramData\chocolatey\bin"
}
$ConfiguredSources = & choco source list --limit-output
$SourcePattern = [regex]::Escape($SourceName)
$SourceFound = $ConfiguredSources |
Where-Object { $_ -match $SourcePattern }
if (-not $SourceFound) {
throw "Fuente Chocolatey ausente: $SourceName"
}
$InstallArguments = @(
"install",
$ManifestPath,
"--source=$SourceName",
"--yes",
"--no-progress"
)
& choco @InstallArguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Instalacion del manifiesto fallida: codigo $InstallCode"
}
& choco list
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "Bootstrap terminado; se requiere reinicio."
} El script es idempotente para la instalación del cliente: no reinstala Chocolatey si el comando ya existe. El carácter reproducible procede sobre todo del manifiesto versionado, de la fuente interna inmutable y de las pruebas posteriores a la instalación.
Mejoras recomendadas para un parque: firma Authenticode de su script de bootstrap, ejecución desde una imagen de referencia o una herramienta de configuración, envío del registro a un almacenamiento central, identificador único de despliegue, control del espacio en disco, detección de un reinicio ya pendiente, prueba aplicativa propia del papel del VPS y un bloqueo que impida dos despliegues simultáneos.
16. Proxy, caché y acceso de red
Con el repositorio comunitario, el VPS debe alcanzar community.chocolatey.org, la infraestructura de paquetes de Chocolatey y los dominios de cada editor desde los que los scripts descargan los binarios.
Esta última dependencia explica por qué autorizar solo el dominio de Chocolatey en un proxy no siempre basta. Un repositorio interno con recursos internalizados reduce mucho el número de destinos externos.
Mostrar la configuración:
choco config list
choco source list Configurar un proxy explícito sin autenticación:
choco config set --name=proxy --value=http://proxy.example.net:8080 Retirar ese ajuste:
choco config unset --name=proxy Para un proxy autenticado, no escriba la contraseña en un script ni en un ticket. Inyéctela desde una bóveda y compruebe qué rastros de línea de comandos recoge su EDR.
Mover la caché
Chocolatey usa por defecto un directorio temporal para las descargas. En un VPS con un disco de sistema pequeño, puede definir una caché dedicada:
$CachePath = "D:\ChocolateyCache"
New-Item -Path $CachePath -ItemType Directory -Force |
Out-Null
choco config set --name=cacheLocation --value=$CachePath
choco config get --name=cacheLocation Si el volumen D: no existe, elija una ruta real. Proteja ese directorio frente a la escritura por usuarios no autorizados y defina una política de limpieza. Una caché puede contener instaladores ejecutables; no es una simple carpeta sin importancia.
17. Registros, inventario y prueba de cambios
El registro principal se encuentra normalmente aquí:
$ChocolateyLog = "C:\ProgramData\chocolatey\logs\chocolatey.log"
Get-Content $ChocolateyLog -Tail 200 Para añadir un registro propio de una operación:
$ChangeId = "CHG-2026-0001"
$OperationLog = "C:\Ops\Chocolatey\$ChangeId.log"
$Arguments = @(
"upgrade",
"git",
"--yes",
"--no-progress",
"--log-file=$OperationLog"
)
& choco @Arguments Para cada cambio en producción, conserve:
| Prueba | Ejemplo |
|---|---|
| estado anterior | choco list y versión del software |
| solicitud | ticket o commit del manifiesto |
| fuente | repositorio y versión aprobada |
| comando | argumentos sin secretos |
| resultado | código de salida y extractos útiles |
| reinicio | requerido, realizado y hora |
| validación | servicio iniciado, puerto o prueba funcional |
| estado posterior | nueva versión y supervisión normal |
No publique un registro en bruto sin releerlo: puede aparecer una URL, un nombre de usuario, un token o una ruta sensible.
18. Desinstalar y volver atrás
Desinstalar un paquete:
choco uninstall git -y --no-progress
$UninstallCode = $LASTEXITCODE
if ($UninstallCode -notin @(0, 1605, 1614, 1641, 3010)) {
throw "Desinstalacion fallida: codigo $UninstallCode"
} Chocolatey documenta el código 1605 para un software ausente y 1614 para un producto ya desinstalado. El resultado real depende del script del paquete y del desinstalador del editor.
Una vuelta a una versión anterior no siempre es un retorno fiable: un instalador puede rechazar una versión previa, un formato de configuración o de datos puede haber migrado, un servicio puede no aceptar ya el binario antiguo, y un paquete puede no ofrecer un script de desinstalación completo.
Para un VPS crítico, prepare tres niveles:
- reinstalación del paquete anterior desde el repositorio interno;
- restauración de configuraciones y datos compatibles;
- reconstrucción del VPS a partir del manifiesto y las copias.
La instantánea de precaución puede reducir el tiempo de recuperación, pero su restauración anula también las escrituras realizadas desde que se tomó. Defina qué debe respaldarse por separado antes de la ventana, como describe nuestra guía sobre cómo respaldar su VPS Windows.
19. Resolución de problemas
El comando choco no se reconoce
Abra una consola nueva o actualice el PATH de la sesión:
$env:Path += ";$env:ProgramData\chocolatey\bin"
Get-Command choco
choco --version Si se usó una ruta personalizada ChocolateyInstall, adapte el valor.
Error de TLS o conexión cerrada
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Test-NetConnection community.chocolatey.org -Port 443 Compruebe también la fecha y la hora, la resolución DNS, el proxy, la inspección TLS, la cadena de certificación, las reglas de salida y la presencia de .NET Framework 4.8.
No use una opción que ignore los errores de certificado. Corrija la cadena de confianza o el proxy.
La directiva de ejecución bloquea el bootstrap
Get-ExecutionPolicy -List
Set-ExecutionPolicy Bypass -Scope Process -Force Una GPO puede seguir teniendo prioridad sobre este ajuste. En ese caso, use el método de despliegue autorizado por la organización, por ejemplo un MSI aprobado o un script firmado.
Error de suma de comprobación
No ignore el error para «hacer pasar» la instalación. Puede indicar una versión nueva publicada bajo la misma URL, un paquete aún no actualizado, una interceptación o una caché intermedia, una descarga incompleta, o un recurso realmente distinto del validado.
Compare el binario del editor, el script del paquete, la versión y la suma. Espere una versión corregida o internalice el binario aprobado.
El paquete está instalado pero el software no
Con la edición Open Source, el estado del paquete puede divergir de Programas y características si el software se modificó fuera de Chocolatey.
choco list
Get-Package |
Sort-Object Name |
Select-Object Name, Version, ProviderName Compruebe después el servicio, el archivo ejecutable o la clave del registro propia del software. No marque el servidor como conforme basándose solo en la salida de choco list.
Hay una fuente interna configurada pero se sigue usando el repositorio comunitario
choco source list Compruebe las prioridades, la disponibilidad del paquete interno y los argumentos --source. Para una producción cerrada, desactive o elimine explícitamente la fuente comunitaria.
Una actualización pide un reinicio
No reinicie de inmediato un servidor de producción desde un script genérico. Informe del código 1641 o 3010, termine las comprobaciones posibles, reinicie después en la ventana prevista y valide los servicios.
¿Dónde leer el error detallado?
Get-Content "C:\ProgramData\chocolatey\logs\chocolatey.log" -Tail 300 Busque primero el primer error significativo y el paquete dependiente que se menciona. Los avisos posteriores pueden ser solo consecuencias.
20. Buenas prácticas en un VPS Windows
- no instale herramientas innecesarias para el papel del servidor;
- use una consola de administrador solo durante la operación;
- limite la directiva
Bypassal proceso; - inspeccione el bootstrap antes de la primera ejecución;
- inspeccione los scripts de los paquetes nuevos o delicados;
- use versiones validadas y disponibles en un repositorio interno;
- separe los repositorios de prueba y producción;
- desactive el repositorio comunitario en producción;
- no ponga los secretos del repositorio en Git;
- trate los códigos de reinicio como éxitos pendientes de completar;
- ejecute
outdatedcon regularidad, sin actualización automática a ciegas; - pruebe la función del software tras la instalación;
- centralice los registros y el inventario;
- revise los pins con regularidad;
- pruebe una reconstrucción completa del VPS.
Preguntas frecuentes
¿Chocolatey es gratuito para una empresa?
Sí. La página oficial de precios presenta la edición Open Source como gratuita, utilizable por organizaciones y sin límite de máquinas. Las funciones Business son de pago, pero un repositorio privado no exige por sí solo la edición Business.
¿Puede desplegarse Chocolatey Pro en los VPS de una empresa?
No, según la página oficial de precios. Pro se presenta como una licencia personal y nominativa, prevista para las máquinas propias del usuario, hasta ocho. Una organización debe elegir Open Source o evaluar Business.
¿Publican los editores los paquetes comunitarios?
No necesariamente. Los crean mantenedores de la comunidad, a veces el propio editor, a veces un tercero. Compruebe la ficha de cada paquete.
¿Garantiza la moderación que un paquete es seguro?
No. Añade validación, verificación, análisis y revisión según el estado del paquete. Reduce el riesgo, pero no sustituye a la aprobación interna, la revisión del script y la prueba de la versión exacta.
¿Por qué leer install.ps1 si la URL es oficial?
Porque el comando oficial descarga y ejecuta PowerShell con privilegios elevados. Chocolatey recomienda esa inspección él mismo. Además permite conservar la suma del código realmente autorizado.
¿Hay que ejecutar choco upgrade all cada noche?
No en un servidor de producción sin pruebas. Use choco outdated para detectar, cualifique las versiones y despliegue después con ventana, pruebas y gestión de los reinicios.
¿Basta un packages.config para clonar un VPS?
No. Describe los paquetes, pero no todas las configuraciones, datos, secretos, roles de Windows, reglas de cortafuegos, certificados o tareas programadas. Intégrelo en un procedimiento de configuración más amplio.
¿Qué repositorio interno elegir?
Elija un producto compatible con NuGet que su equipo sepa respaldar, actualizar y supervisar. Chocolatey cita ProGet, Nexus y Artifactory. Chocolatey.Server está obsoleto.
¿Sustituye Chocolatey a Winget?
Ambos pueden coexistir, pero multiplicar los gestores aumenta el riesgo de estados divergentes. Defina un responsable por software y evite que el mismo programa lo actualicen Chocolatey, Winget y su propio actualizador sin una regla clara.
Lista de comprobación de explotación
- Windows Server y .NET Framework están al día;
- la consola utilizada está elevada;
- el script oficial se descargó antes de ejecutarlo;
- se han conservado su contenido y su SHA-256;
- la directiva de ejecución solo se modificó en el ámbito Process;
- la ruta de Chocolatey tiene ACL restrictivas;
- cada paquete tiene un responsable y una justificación;
- se han revisado el mantenedor, los scripts, las URL y las sumas;
- las versiones constan en un manifiesto;
- los parámetros de instalación están documentados aparte;
- la fuente de producción es interna;
- la fuente comunitaria está desactivada o eliminada en producción;
- las identidades de lectura y publicación están separadas;
- los secretos no figuran en los scripts;
- los códigos 1641 y 3010 se tratan;
- las actualizaciones se prueban antes del despliegue;
- se genera con regularidad un informe
outdated; - los registros se conservan;
- se han probado la restauración y la reconstrucción.
Para ir más lejos
Esta guía encaja con nuestros otros artículos de Windows: primeros pasos con su VPS Windows para empezar, configurar el firewall de Windows Server para la política de red, instalar IIS si el VPS aloja un sitio, instalar Active Directory para un controlador de dominio, y guardar su VPS Windows antes de cualquier operación delicada.
Fuentes técnicas principales
Instalación y comandos
- Chocolatey CLI: setup e instalación
- Chocolatey CLI: comandos
- Install
- Upgrade
- Outdated
- Export
- Pin
- Source
- Config
- Uninstall
Paquetes, confianza y repositorios
- Chocolatey: seguridad
- Repositorio comunitario: moderación
- Repositorio comunitario: FAQ
- Automatizar la internalización de paquetes
- Package Internalizer
- Recompilar paquetes manualmente
- Chocolatey.Server: aviso de obsolescencia
