Sur un VPS Windows neuf, installer manuellement Git, 7-Zip, les outils Sysinternals et chaque dépendance prend du temps et produit des serveurs légèrement différents. Chocolatey permet de décrire ces logiciels, de les installer silencieusement, d'identifier ceux qui sont obsolètes et de rejouer le même socle sur un autre VPS.
L'intérêt n'est donc pas de mémoriser dix commandes choco. Le véritable sujet est l'exploitation :
- comment installer Chocolatey sans exécuter aveuglément un script téléchargé ;
- comment définir un état logiciel reproductible ;
- comment contrôler les mises à jour et les redémarrages ;
- comment savoir qui a créé le paquet qui exécutera du PowerShell en administrateur ;
- quand remplacer le dépôt communautaire par un dépôt interne ;
- ce que les éditions payantes apportent réellement.
Méthode, périmètre et limites
Les procédures ont été vérifiées le 31 août 2026 dans les documentations officielles de Chocolatey CLI, du dépôt communautaire Chocolatey, de Chocolatey Software et de Microsoft PowerShell.
Chocolatey CLI 2.x exige .NET Framework 4.8. Le programme d'installation tente de l'installer s'il manque, mais cette opération peut nécessiter un redémarrage. Ce guide vise des versions maintenues de Windows Server et une console PowerShell lancée en administrateur.
Un paquet communautaire, son mainteneur, son script ou l'URL du logiciel sous-jacent peuvent évoluer après publication. Pour un usage professionnel, validez la version exacte dans un environnement de test et publiez-la ensuite dans une source maîtrisée. Les tarifs et fonctionnalités cités changent également : vérifiez-les sur les pages officielles au moment de votre décision.
Ce guide ne remplace pas les licences des logiciels installés, une politique de gestion des vulnérabilités, Windows Update, une sauvegarde ou une procédure de reconstruction, la qualification applicative avant mise à jour, ni les contrôles EDR, antivirus, proxy et pare-feu de l'organisation.
1. Ce que Chocolatey gère et ce qu'il ne gère pas
Chocolatey est un gestionnaire de paquets pour Windows. Un paquet .nupkg est une archive fondée sur le format NuGet. Il contient des métadonnées .nuspec et peut contenir des scripts PowerShell comme chocolateyInstall.ps1, chocolateyBeforeModify.ps1 ou chocolateyUninstall.ps1.
Le paquet peut embarquer un logiciel si ses droits de redistribution le permettent, télécharger un MSI, un EXE ou une archive depuis le site de l'éditeur, vérifier son empreinte, lancer l'installation silencieuse, créer des raccourcis de commande appelés shims, déclarer des dépendances et exécuter des opérations de configuration.
Cette distinction est essentielle :
| Élément | Responsable |
|---|---|
| logiciel final | éditeur du logiciel |
| paquet Chocolatey communautaire | un ou plusieurs mainteneurs, parfois indépendants de l'éditeur |
| dépôt communautaire et modération | Chocolatey Software et ses services de validation |
| décision d'autoriser le paquet | votre organisation |
| dépôt interne et promotion des versions | votre équipe d'exploitation |
Chocolatey gère d'abord l'état de ses paquets. Avec l'édition Open Source, un logiciel mis à jour ou supprimé en dehors de Chocolatey peut entraîner un écart entre l'état Windows et l'état du paquet. Les éditions sous licence proposent une synchronisation avec Programmes et fonctionnalités, mais cette fonction ne dispense pas de surveiller l'état réel du serveur.
Chocolatey ne remplace pas Windows Update
Utilisez Windows Update pour le système, les composants Microsoft et les correctifs du système d'exploitation. Utilisez Chocolatey pour les logiciels et outils que vous avez choisi de gérer par paquets. Un paquet communautaire portant le nom d'une mise à jour Windows ne doit pas devenir un substitut automatique à votre politique de correctifs Microsoft.
2. Modèle de confiance sur un serveur
Une installation Chocolatey combine plusieurs maillons :
- le script d'installation de Chocolatey ;
- le client
chocoinstallé ; - le dépôt configuré ;
- le paquet et ses scripts ;
- le serveur depuis lequel le paquet télécharge éventuellement le logiciel ;
- le programme d'installation de l'éditeur ;
- les dépendances du paquet.
Une connexion HTTPS protège le transport et authentifie le serveur distant selon la chaîne de certificats. Elle ne prouve pas qu'un script répond à votre politique ni que son comportement restera adapté à votre environnement.
Sur un VPS, les scripts sont généralement exécutés avec les droits d'administrateur. Un paquet peut donc modifier les services, le registre, les variables d'environnement, les tâches planifiées et les fichiers système. Traitez chaque source comme un fournisseur de code privilégié.
Trois niveaux d'usage
| Niveau | Source | Gestion recommandée |
|---|---|---|
| test personnel | dépôt communautaire | revue du paquet et installation ponctuelle |
| petit parc professionnel | dépôt interne, import manuel | versions approuvées, manifeste et journal de changement |
| parc industrialisé | dépôts test et production, automatisation | internalisation, CI, tests, approbation, audit et déploiement central |
3. Préparer le VPS
Connectez-vous en RDP ou par votre canal d'administration habituel. Si le VPS vient d'être livré, commencez par notre guide premiers pas avec votre VPS Windows.
Avant Chocolatey : installez les mises à jour Windows, redémarrez si nécessaire, vérifiez l'heure et la résolution DNS, vérifiez l'accès HTTPS sortant, ouvrez PowerShell en tant qu'administrateur et créez un snapshot de précaution si la plateforme le permet.
Collecte initiale :
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 Le snapshot facilite un retour arrière après une modification système, mais ne remplace pas une sauvegarde externe. Une mise à jour de logiciel peut aussi modifier des données applicatives que le retour au snapshot ferait régresser.
4. Installer Chocolatey avec la méthode officielle
La page d'installation officielle propose cette commande 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"
)) La portée Process limite la modification de la stratégie d'exécution à la console actuelle. Le nombre 3072 correspond à TLS 1.2 dans les versions de .NET concernées.
Cette commande est officielle, mais elle télécharge puis exécute immédiatement du code. Chocolatey demande lui-même d'inspecter install.ps1 avant de l'utiliser. Pour une pratique cohérente avec notre guide de durcissement, qui déconseille d'exécuter un script téléchargé sans l'avoir lu, préférez la procédure suivante.
5. Télécharger le script, le lire, puis l'exécuter
Créez un répertoire de travail et téléchargez le script sans l'exécuter :
$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 Vérifiez le fichier :
Get-Item $InstallScript |
Format-List FullName, Length, CreationTimeUtc,
LastWriteTimeUtc
Get-FileHash -Path $InstallScript -Algorithm SHA256
Get-Content -Path $InstallScript Vous pouvez aussi l'ouvrir dans le Bloc-notes :
notepad.exe $InstallScript Ce qu'il faut chercher pendant la revue
Contrôlez notamment l'URL depuis laquelle le paquet Chocolatey est téléchargé, les variables d'environnement consultées, les chemins créés, les modifications de PATH, les téléchargements ou exécutables secondaires, les appels PowerShell dynamiques, et l'absence de destination ou de commande inattendue.
L'empreinte SHA-256 consignée prouve que le même fichier a été revu et exécuté. Elle n'authentifie pas le script à elle seule tant qu'elle n'est pas comparée à une valeur publiée par un canal indépendant. La vérification HTTPS et la revue de contenu restent donc nécessaires.
Après validation interne, exécutez le fichier local :
Set-ExecutionPolicy Bypass -Scope Process -Force
& $InstallScript
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
$env:Path += ";$env:ProgramData\chocolatey\bin"
}
choco --version La stratégie d'exécution permanente de la machine n'a pas été abaissée. Fermer la console supprime le Bypass défini au niveau Process.
Pour une automatisation professionnelle
Ne retéléchargez pas silencieusement la version courante d'install.ps1 à chaque création de serveur. Après validation :
- archivez le script approuvé ou le MSI officiel dans votre dépôt d'artefacts ;
- consignez son SHA-256 et la version de Chocolatey ;
- faites pointer le bootstrap vers cette copie interne ;
- validez une nouvelle version avant de remplacer l'ancienne ;
- retirez la source communautaire des serveurs de production si elle n'est pas nécessaire.
Chocolatey propose aussi un MSI depuis la version 2.0.0. La documentation précise que ce MSI sert au bootstrap : il installe Chocolatey, mais ne réalise ni mise à niveau ni désinstallation du client.
6. Contrôler l'installation
Le chemin par défaut est C:\ProgramData\chocolatey. Chocolatey indique que les permissions y sont durcies pour les administrateurs. Si vous choisissez un autre emplacement avec ChocolateyInstall, la documentation vous demande de gérer vous-même les 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 Vérifiez au minimum :
| Contrôle | Résultat attendu |
|---|---|
choco --version | numéro de version, sans erreur |
| commande résolue | binaire sous le répertoire Chocolatey |
| dossier d'installation | accessible en écriture uniquement aux identités prévues |
| source communautaire | présente seulement si votre politique l'autorise |
| journal | C:\ProgramData\chocolatey\logs\chocolatey.log |
Ne rendez pas C:\ProgramData\chocolatey modifiable par un utilisateur standard : il pourrait remplacer un shim, un script ou un paquet ensuite exécuté avec des privilèges élevés. Notre guide configurer le pare-feu Windows Server sur un VPS complète ce durcissement côté réseau.
7. Comprendre qui publie les paquets communautaires
Le dépôt community.chocolatey.org contient des paquets créés par des membres de la communauté. Le mainteneur du paquet n'est pas nécessairement l'éditeur du logiciel. La FAQ du dépôt communautaire distingue explicitement le support du paquet, assuré par ses mainteneurs, et le support du logiciel, assuré par son éditeur.
Depuis octobre 2014, chaque version de chaque paquet soumis passe par un processus de modération avant d'être publiée. Selon la documentation de sécurité Chocolatey et la documentation de modération, ce processus peut comprendre une validation automatique de qualité, une vérification d'installation et de désinstallation, une analyse VirusTotal, une revue humaine pour les paquets qui ne sont pas en statut de confiance, et des contrôles de provenance et d'empreinte des binaires.
Un paquet « trusted » peut être approuvé après les contrôles automatiques sans nouvelle revue humaine si aucun contrôle ne remonte de problème. La modération réduit le risque ; elle ne transforme pas un dépôt communautaire en source sous votre contrôle.
Chocolatey indique également que seuls les installateurs en-US sont testés par défaut par son scanner de paquets. Un paquet peut fonctionner dans l'environnement de vérification et échouer avec une autre langue, une autre architecture, un proxy, un redémarrage en attente ou une configuration serveur particulière.
Vérifier un paquet avant de l'installer
Commencez par les métadonnées :
choco info 7zip
choco info git
choco info sysinternals Sur la page du paquet, contrôlez l'identité des mainteneurs, le lien vers le code source du paquet, le statut de validation, vérification et analyse, l'historique des versions, la section Files, le fichier chocolateyInstall.ps1, les URL téléchargées, les empreintes déclarées, les dépendances, ainsi que les paramètres et arguments silencieux.
La FAQ officielle explique que le fichier .nupkg peut être téléchargé, renommé en .zip puis extrait pour inspection. Examinez le paquet exact, pas seulement la branche principale de son dépôt source : la branche a pu changer depuis la version publiée.
Ce que VirusTotal ne garantit pas
Un résultat sans détection n'est pas une preuve d'innocuité. Il ne valide pas la logique PowerShell, l'intention du mainteneur, la conformité de licence ou le comportement futur d'une URL distante. La protection antimalware à l'exécution des éditions Pro et Business concerne les fichiers téléchargés depuis une source externe pendant l'installation ; Chocolatey précise que les binaires directement embarqués dans un paquet ne sont pas analysés par cette fonction à ce moment-là.
8. Installer des outils sans transformer le serveur en poste de travail
Sur un serveur, chaque logiciel augmente la surface de maintenance. N'installez que les outils nécessaires au rôle du VPS.
Exemple d'installation explicite avec contrôle de chaque résultat :
$PackageIds = @(
"7zip",
"git",
"sysinternals"
)
foreach ($PackageId in $PackageIds) {
& choco install $PackageId --yes --no-progress
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Installation de $PackageId en echec : code $InstallCode"
}
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "$PackageId installe ; redemarrage requis."
}
}
choco list Les codes 1641 et 3010 représentent respectivement une réussite avec redémarrage initié et une réussite avec redémarrage requis. Chocolatey définit d'ailleurs comme codes de sortie valides 0, 1605, 1614, 1641 et 3010. Un script qui traite tout code différent de zéro comme un échec déclarerait donc à tort certaines installations en erreur.
N'utilisez pas --force par défaut. La documentation des commandes Chocolatey explique que cette option contourne des comportements de protection et la déconseille dans les scripts ordinaires.
9. Rendre l'installation reproductible
Une suite de commandes copiée depuis un historique PowerShell n'est pas encore une configuration reproductible. Il faut conserver l'identifiant exact du paquet, la version validée, la source autorisée, les paramètres du paquet, les arguments passés au programme d'installation, le code de retour, le besoin de redémarrage et un test fonctionnel après installation.
Exporter l'état d'un VPS de référence
La commande choco export crée un fichier packages.config. Sur une machine de référence déjà validée :
$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 Placez ce manifeste dans votre dépôt de configuration avec une revue de code, un numéro de changement, la date de validation, l'environnement de test et la source interne correspondante.
Ne considérez pas l'export comme une sauvegarde complète. Il ne capture pas nécessairement les paramètres de chaque installation, les réglages applicatifs, les secrets, les données ni les logiciels installés hors Chocolatey.
Rejouer le manifeste
Sur un nouveau VPS :
$ManifestPath = "C:\Ops\Chocolatey\packages.config"
$ApprovedSource = "internal-production"
if (-not (Test-Path $ManifestPath)) {
throw "Manifeste Chocolatey introuvable : $ManifestPath"
}
$Arguments = @(
"install",
$ManifestPath,
"--source=$ApprovedSource",
"--yes",
"--no-progress"
)
& choco @Arguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Bootstrap logiciel en echec : code $InstallCode"
} Ne pas confondre versions figées et maintenance
Une version épinglée rend une reconstruction prévisible, mais elle peut aussi conserver une vulnérabilité. Le bon cycle est :
- détecter une nouvelle version ;
- importer le paquet et ses ressources ;
- revoir les changements ;
- tester l'installation, la mise à niveau et le redémarrage ;
- promouvoir la version ;
- modifier le manifeste ;
- déployer par vagues ;
- conserver l'ancienne version pendant la fenêtre de retour arrière.
10. Mettre à jour les logiciels sans « upgrade all » aveugle
Afficher les paquets obsolètes :
choco outdated Mettre à jour un paquet précis après validation :
choco upgrade git -y --no-progress
$UpgradeCode = $LASTEXITCODE
if ($UpgradeCode -notin @(0, 1641, 3010)) {
throw "Mise a niveau de Git en echec : code $UpgradeCode"
} Mettre à jour vers une version approuvée :
$ApprovedVersion = "VERSION_VALIDEE"
$UpgradeArguments = @(
"upgrade",
"git",
"--version=$ApprovedVersion",
"--source=internal-production",
"--yes",
"--no-progress"
)
& choco @UpgradeArguments La valeur VERSION_VALIDEE est volontairement un marqueur : remplacez-la par la version réellement qualifiée et disponible dans votre dépôt.
Pourquoi éviter une mise à jour globale automatique en production
La commande suivante existe :
choco upgrade all -y Elle peut être acceptable sur une machine de test ou un poste non critique. Sur un VPS de production, elle peut mettre à jour simultanément un runtime, un outil utilisé par un service, une dépendance et Chocolatey lui-même. En cas d'échec, l'origine de la régression devient plus difficile à isoler.
Préférez une fenêtre de maintenance, un snapshot de précaution, une liste de versions approuvées, une mise à jour par lots cohérents, des tests applicatifs, un redémarrage contrôlé et un déploiement progressif sur plusieurs serveurs.
La documentation Chocolatey signale également qu'une mise à niveau globale peut laisser des dépendances dans un état incohérent si une partie de la chaîne échoue. Commencez alors par le paquet ou la dépendance explicitement citée dans l'erreur.
Figer temporairement un paquet
choco pin add --name=git
choco pin list
choco pin remove --name=git Un pin est une mesure temporaire, pas une stratégie de sécurité. Associez-le à une raison, un ticket, un propriétaire et une date de réexamen.
11. Produire un rapport de mise à jour sans modifier le serveur
Pour une supervision simple, activez les codes de sortie enrichis :
choco feature enable --name=useEnhancedExitCodes Avec cette fonction, choco outdated renvoie :
| Code | Signification |
|---|---|
| 0 | aucun paquet obsolète |
| 2 | au moins un paquet obsolète |
| 1 ou -1 | erreur |
Script d'audit, sans installation :
$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 "Aucune mise a jour Chocolatey detectee."
}
2 {
Write-Warning "Des mises a jour sont disponibles : $ReportPath"
}
default {
throw "Audit Chocolatey en echec : code $ExitCode"
}
} Planifiez ce contrôle avec votre outil de supervision, une GPO, un ordonnanceur ou une tâche Windows. Ne transformez pas automatiquement ce rapport en upgrade all sans validation.
12. Pourquoi une entreprise devrait utiliser son propre dépôt
Chocolatey Software écrit explicitement qu'une organisation ne devrait pas utiliser directement le dépôt communautaire comme source de production. Son guide d'internalisation automatisée donne trois raisons :
- confiance : les créateurs et mainteneurs externes ne sont pas sous le contrôle de l'organisation ;
- stabilité : les paquets et téléchargements doivent rester disponibles pendant les opérations ;
- contrôle : les tests, l'approbation et la publication doivent appartenir à l'organisation.
Un dépôt privé permet aussi de conserver les versions réellement déployées, de ne plus dépendre d'une URL éditeur modifiée ou supprimée, de réduire les domaines Internet autorisés depuis les VPS, de qualifier un binaire avant sa diffusion, de créer vos propres paquets de configuration, de fonctionner dans un réseau isolé, de séparer import, test et production, et d'associer chaque promotion à une revue et un changement.
Architecture conseillée
| Étape | Fonction |
|---|---|
| dépôt communautaire ou éditeur | origine externe, jamais consommée directement par la production |
| internalisation | récupération du paquet et de ses ressources |
| dépôt Git | scripts, manifestes, empreintes et historique de revue |
| dépôt Chocolatey de test | installation sur un serveur représentatif |
| contrôles | antivirus, signatures, empreintes, tests fonctionnels et redémarrage |
| dépôt Chocolatey de production | uniquement les versions approuvées |
| VPS | accès en lecture au dépôt de production |
Pour les clients, utilisez une identité en lecture seule. Réservez le droit de publier à la CI ou à une identité distincte. Ne placez jamais un jeton de publication dans le script de bootstrap d'un VPS.
Dépôts compatibles
La documentation Chocolatey cite notamment Inedo ProGet, Sonatype Nexus Repository, JFrog Artifactory, une source NuGet compatible et, dans certains cas, un partage de fichiers interne.
L'ancien produit Chocolatey.Server est déprécié. Chocolatey recommande de migrer vers une solution tierce et cite ProGet, Nexus ou Artifactory. Ne démarrez donc pas un nouveau projet autour de Chocolatey.Server.
Open Source ou Business pour le dépôt interne ?
L'édition Open Source sait consommer plusieurs sources, créer des paquets et utiliser un dépôt privé. Elle permet aussi une internalisation manuelle : téléchargement du paquet, récupération des ressources, modification des scripts, nouvelle compilation et publication.
Chocolatey for Business automatise ce travail avec Package Internalizer : le client télécharge le paquet et ses ressources externes, réécrit les références et recompile un paquet utilisable sans accès Internet. La fonction fait gagner du temps, mais la décision d'approuver et de tester reste à votre charge.
13. Configurer une source interne
Exemple avec une source HTTPS fictive :
$SourceArguments = @(
"source",
"add",
"--name=internal-production",
"--source=https://packages.example.net/nuget/chocolatey/v2",
"--priority=1"
)
& choco @SourceArguments
choco source list Une priorité numérique faible est évaluée avant une priorité plus élevée. Vérifiez toujours le résultat avec choco source list.
Après avoir confirmé que le dépôt interne contient Chocolatey et tous les paquets nécessaires, désactivez le dépôt communautaire :
choco source disable --name=chocolatey
choco source list Pour un environnement totalement isolé, la documentation Chocolatey recommande de supprimer la source communautaire :
choco source remove --name=chocolatey La désactivation est plus facilement réversible ; la suppression évite qu'une réactivation non maîtrisée réintroduise la source. Choisissez selon votre gestion de configuration.
Authentification et secrets
Chocolatey prend en charge l'authentification par utilisateur et mot de passe ainsi que les certificats clients X.509. La commande source add chiffre le mot de passe dans le fichier de configuration, mais un secret transmis sur une ligne de commande peut être visible par d'autres mécanismes de journalisation ou d'inventaire.
Bonnes pratiques : utilisez un compte technique en lecture seule sur les VPS, préférez un jeton court ou un certificat client si le dépôt le permet, récupérez le secret depuis un coffre au moment du déploiement, ne le placez ni dans Git, ni dans packages.config, ni dans l'image modèle, séparez les identités de lecture et de publication, et renouvelez les secrets en testant leur révocation.
14. Comparer les éditions sans les survendre
Les fonctions et tarifs peuvent évoluer. Le tableau ci-dessous reflète les pages officielles Compare Chocolatey Editions et Pricing consultées le 31 août 2026.
| Édition | Public visé | Ce qu'elle apporte dans ce guide | Limite à connaître |
|---|---|---|---|
| Open Source | particuliers et organisations | gestion des paquets, création de paquets, plusieurs sources, dépôt privé, mise à niveau globale | internalisation et gouvernance avancée à construire manuellement |
| Pro | personne physique, licence nominative | fonctions Open Source, cache CDN, protection antimalware à l'exécution, synchronisation et fonctions de confort | licence personnelle et nominative ; jusqu'à 8 machines personnelles |
| Business (C4B) | organisations | Package Internalizer, Central Management, audit, libre-service, synchronisation complète et fonctions de déploiement | coût par nœud, infrastructure et processus à exploiter |
Tarifs affichés au 31 août 2026
- Open Source : gratuite, sans limite de machines ;
- Pro : 96 dollars par an, licence personnelle nominative, jusqu'à 8 machines personnelles ;
- Business : à partir de 18 dollars par licence et par an ;
- la page de prix indique une souscription annuelle Business démarrant à 1 800 dollars par an, correspondant à un minimum de 100 nœuds à 18 dollars par nœud et par an, avec des paliers dégressifs au-delà de 500 nœuds.
Vérifiez la page officielle au moment de l'achat. Les taxes, devis, remises, support premium et conditions contractuelles peuvent modifier le coût réel.
Choix raisonnable selon la taille
| Situation | Choix souvent suffisant |
|---|---|
| un ou quelques VPS, équipe capable de maintenir ses paquets | Open Source avec dépôt privé et import manuel |
| usage strictement personnel | Open Source ou Pro selon les fonctions souhaitées |
| parc d'entreprise avec import fréquent de paquets externes | Business à évaluer pour l'Internalizer et l'audit |
| besoin de libre-service pour des utilisateurs non administrateurs | Business |
| besoin de tableau de bord central de conformité | Business ou outil de gestion tiers déjà en place |
Business ne rend pas automatiquement les paquets sûrs. Il facilite l'internalisation, le contrôle central et l'audit. Si l'organisation possède déjà un dépôt NuGet, une CI, un EDR et un outil de configuration, l'édition Open Source peut suffire pour un petit périmètre correctement exploité.
15. Script de bootstrap reproductible
Le script suivant ne choisit pas les logiciels à votre place. Il exige un manifeste existant, une source Chocolatey déjà configurée, une URL de bootstrap approuvée et l'empreinte SHA-256 attendue du script d'installation.
Dans une production mature, BootstrapUri doit pointer vers votre copie interne validée.
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 "Manifeste introuvable : $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 "Empreinte du bootstrap invalide."
}
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 "Source Chocolatey absente : $SourceName"
}
$InstallArguments = @(
"install",
$ManifestPath,
"--source=$SourceName",
"--yes",
"--no-progress"
)
& choco @InstallArguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Installation du manifeste en echec : code $InstallCode"
}
& choco list
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "Bootstrap termine ; redemarrage requis."
} Le script est idempotent pour l'installation du client : il ne réinstalle pas Chocolatey si la commande existe. Le caractère reproductible vient surtout du manifeste versionné, de la source interne immuable et des tests après installation.
Améliorations recommandées pour un parc : signature Authenticode de votre script de bootstrap, exécution depuis une image de référence ou un outil de configuration, envoi du journal vers un stockage central, identifiant unique de déploiement, contrôle de l'espace disque, détection d'un redémarrage déjà en attente, test applicatif propre au rôle du VPS et verrou empêchant deux déploiements simultanés.
16. Proxy, cache et accès réseau
Avec le dépôt communautaire, le VPS doit joindre community.chocolatey.org, l'infrastructure de paquets Chocolatey et les domaines de chaque éditeur depuis lesquels les scripts téléchargent les binaires.
Cette dernière dépendance explique pourquoi autoriser seulement le domaine Chocolatey dans un proxy ne suffit pas toujours. Un dépôt interne avec ressources internalisées réduit fortement le nombre de destinations externes.
Afficher la configuration :
choco config list
choco source list Configurer un proxy explicite sans authentification :
choco config set --name=proxy --value=http://proxy.example.net:8080 Retirer ce réglage :
choco config unset --name=proxy Pour un proxy authentifié, n'inscrivez pas le mot de passe dans un script ou un ticket. Injectez-le depuis un coffre et vérifiez quelles traces de ligne de commande sont collectées par votre EDR.
Déplacer le cache
Chocolatey utilise par défaut un répertoire temporaire pour les téléchargements. Sur un VPS dont le disque système est petit, vous pouvez définir un cache dédié :
$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 le volume D: n'existe pas, choisissez un chemin réel. Protégez ce répertoire contre l'écriture par des utilisateurs non autorisés et définissez une politique de nettoyage. Un cache peut contenir des installateurs exécutables ; ce n'est pas un simple dossier sans enjeu.
17. Journaux, inventaire et preuve de changement
Le journal principal se trouve normalement ici :
$ChocolateyLog = "C:\ProgramData\chocolatey\logs\chocolatey.log"
Get-Content $ChocolateyLog -Tail 200 Pour ajouter un journal propre à une opération :
$ChangeId = "CHG-2026-0001"
$OperationLog = "C:\Ops\Chocolatey\$ChangeId.log"
$Arguments = @(
"upgrade",
"git",
"--yes",
"--no-progress",
"--log-file=$OperationLog"
)
& choco @Arguments Pour chaque changement de production, conservez :
| Preuve | Exemple |
|---|---|
| état avant | choco list et version du logiciel |
| demande | ticket ou commit du manifeste |
| source | dépôt et version approuvée |
| commande | arguments sans secret |
| résultat | code de sortie et extraits utiles |
| redémarrage | requis, réalisé et heure |
| validation | service démarré, port ou test fonctionnel |
| état après | nouvelle version et supervision normale |
Ne publiez pas un journal brut sans le relire : une URL, un nom d'utilisateur, un jeton ou un chemin sensible peut y apparaître.
18. Désinstaller et revenir en arrière
Désinstaller un paquet :
choco uninstall git -y --no-progress
$UninstallCode = $LASTEXITCODE
if ($UninstallCode -notin @(0, 1605, 1614, 1641, 3010)) {
throw "Desinstallation en echec : code $UninstallCode"
} Chocolatey documente les codes 1605 pour un logiciel absent et 1614 pour un produit déjà désinstallé. Le résultat réel dépend du script du paquet et du programme de désinstallation de l'éditeur.
Une rétrogradation n'est pas toujours un retour arrière fiable : un installateur peut refuser une version antérieure, un format de configuration ou de données peut avoir migré, un service peut ne plus accepter l'ancien binaire, et un paquet peut ne pas fournir de script de désinstallation complet.
Pour un VPS critique, préparez trois niveaux :
- réinstallation du paquet précédent depuis le dépôt interne ;
- restauration des configurations et données compatibles ;
- reconstruction du VPS depuis le manifeste et les sauvegardes.
Le snapshot de précaution peut réduire le temps de récupération, mais sa restauration annule aussi les écritures réalisées depuis sa création. Définissez ce qui doit être sauvegardé séparément avant la fenêtre, comme le décrit notre guide sauvegarder son VPS Windows.
19. Dépannage
La commande choco n'est pas reconnue
Ouvrez une nouvelle console ou actualisez le PATH de la session :
$env:Path += ";$env:ProgramData\chocolatey\bin"
Get-Command choco
choco --version Si le chemin personnalisé ChocolateyInstall a été utilisé, adaptez la valeur.
Erreur TLS ou connexion fermée
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Test-NetConnection community.chocolatey.org -Port 443 Contrôlez aussi la date et l'heure, la résolution DNS, le proxy, l'inspection TLS, la chaîne de certification, les règles sortantes et la présence de .NET Framework 4.8.
N'utilisez pas une option qui ignore les erreurs de certificat. Corrigez la chaîne de confiance ou le proxy.
La politique d'exécution bloque le bootstrap
Get-ExecutionPolicy -List
Set-ExecutionPolicy Bypass -Scope Process -Force Une GPO peut rester prioritaire sur ce réglage. Dans ce cas, utilisez la méthode de déploiement autorisée par l'organisation, par exemple un MSI approuvé ou un script signé.
Erreur d'empreinte (checksum mismatch)
N'ignorez pas l'erreur pour « faire passer » l'installation. Elle peut indiquer une nouvelle version publiée sous la même URL, un paquet non encore actualisé, une interception ou un cache intermédiaire, un téléchargement incomplet, ou une ressource réellement différente de celle validée.
Comparez le binaire de l'éditeur, le script du paquet, la version et l'empreinte. Attendez une version corrigée ou internalisez le binaire approuvé.
Le paquet est installé mais le logiciel ne l'est pas
Avec l'édition Open Source, l'état du paquet peut diverger de Programmes et fonctionnalités si le logiciel a été modifié en dehors de Chocolatey.
choco list
Get-Package |
Sort-Object Name |
Select-Object Name, Version, ProviderName Vérifiez ensuite le service, le fichier exécutable ou la clé de registre propre au logiciel. Ne marquez pas le serveur conforme sur la seule sortie de choco list.
Une source interne est configurée mais le dépôt communautaire est encore utilisé
choco source list Vérifiez les priorités, la disponibilité du paquet interne et les arguments --source. Pour une production fermée, désactivez ou supprimez explicitement la source communautaire.
Une mise à jour demande un redémarrage
Ne redémarrez pas immédiatement un serveur de production depuis un script générique. Remontez le code 1641 ou 3010, terminez les contrôles possibles, puis redémarrez dans la fenêtre prévue et validez les services.
Où lire l'erreur détaillée ?
Get-Content "C:\ProgramData\chocolatey\logs\chocolatey.log" -Tail 300 Cherchez d'abord la première erreur significative et le paquet dépendant mentionné. Les avertissements qui suivent peuvent n'être que des conséquences.
20. Bonnes pratiques pour un VPS Windows
- n'installez pas d'outils inutiles au rôle du serveur ;
- utilisez une console administrateur uniquement pendant l'opération ;
- limitez la stratégie
Bypassau processus ; - inspectez le bootstrap avant la première exécution ;
- inspectez les scripts des paquets nouveaux ou sensibles ;
- utilisez des versions validées et disponibles dans un dépôt interne ;
- séparez les dépôts de test et de production ;
- désactivez le dépôt communautaire sur la production ;
- ne mettez pas les secrets du dépôt dans Git ;
- traitez les codes de redémarrage comme des réussites à finaliser ;
- exécutez
outdatedrégulièrement, sans mise à niveau automatique aveugle ; - testez la fonction du logiciel après installation ;
- centralisez les journaux et l'inventaire ;
- révisez régulièrement les pins ;
- testez une reconstruction complète du VPS.
Questions fréquentes
Chocolatey est-il gratuit pour une entreprise ?
Oui. La page de prix officielle présente l'édition Open Source comme gratuite, utilisable par les organisations et sans limite de machines. Les fonctions Business sont payantes, mais un dépôt privé n'exige pas à lui seul l'édition Business.
Chocolatey Pro peut-il être déployé sur les VPS d'une société ?
Non selon la page de prix officielle. Pro est présentée comme une licence personnelle et nominative, prévue pour les machines personnelles de l'utilisateur, dans la limite de huit. Une organisation doit choisir Open Source ou évaluer Business.
Les paquets communautaires sont-ils publiés par les éditeurs ?
Pas nécessairement. Ils sont créés par des mainteneurs communautaires, parfois par l'éditeur lui-même, parfois par un tiers. Vérifiez la fiche de chaque paquet.
La modération garantit-elle qu'un paquet est sûr ?
Non. Elle ajoute validation, vérification, analyse et revue selon le statut du paquet. Elle réduit le risque, mais ne remplace pas l'approbation interne, la revue du script et le test de la version exacte.
Pourquoi lire install.ps1 si l'URL est officielle ?
Parce que la commande officielle télécharge et exécute du PowerShell avec des privilèges élevés. Chocolatey recommande lui-même cette inspection. Elle permet aussi de conserver l'empreinte du code réellement autorisé.
Faut-il lancer choco upgrade all chaque nuit ?
Pas sur un serveur de production sans tests. Utilisez choco outdated pour détecter, qualifiez les versions, puis déployez avec une fenêtre, des tests et une gestion des redémarrages.
Un packages.config suffit-il pour cloner un VPS ?
Non. Il décrit les paquets, mais pas toutes les configurations, données, secrets, rôles Windows, règles de pare-feu, certificats ou tâches planifiées. Intégrez-le dans une procédure plus large de configuration.
Quel dépôt interne choisir ?
Choisissez un produit NuGet compatible que votre équipe sait sauvegarder, mettre à jour et superviser. Chocolatey cite ProGet, Nexus et Artifactory. Chocolatey.Server est déprécié.
Chocolatey remplace-t-il Winget ?
Les deux peuvent coexister, mais multiplier les gestionnaires augmente le risque d'état divergent. Définissez un propriétaire par logiciel et évitez qu'un même programme soit mis à jour par Chocolatey, Winget et son auto-updater sans règle claire.
Checklist d'exploitation
- Windows Server et .NET Framework sont à jour ;
- la console utilisée est élevée ;
- le script officiel a été téléchargé avant exécution ;
- son contenu et son SHA-256 ont été conservés ;
- la stratégie d'exécution n'a été modifiée qu'au niveau Process ;
- le chemin Chocolatey possède des ACL restrictives ;
- chaque paquet possède un propriétaire et une justification ;
- le mainteneur, les scripts, les URL et les empreintes ont été revus ;
- les versions sont consignées dans un manifeste ;
- les paramètres d'installation sont documentés séparément ;
- la source de production est interne ;
- la source communautaire est désactivée ou supprimée en production ;
- les identités de lecture et de publication sont séparées ;
- les secrets ne figurent pas dans les scripts ;
- les codes 1641 et 3010 sont traités ;
- les mises à jour sont testées avant déploiement ;
- un rapport
outdatedest produit régulièrement ; - les journaux sont conservés ;
- la restauration et la reconstruction ont été testées.
Pour aller plus loin
Ce guide s'articule avec nos autres articles Windows : premiers pas avec votre VPS Windows pour la prise en main, configurer le pare-feu Windows Server pour la politique réseau, installer IIS si le VPS héberge un site, installer Active Directory pour un contrôleur de domaine, et sauvegarder son VPS Windows avant toute opération sensible.
Sources techniques principales
Installation et commandes
- Chocolatey CLI : setup et installation
- Chocolatey CLI : commandes
- Install
- Upgrade
- Outdated
- Export
- Pin
- Source
- Config
- Uninstall
Paquets, confiance et dépôts
- Chocolatey : sécurité
- Dépôt communautaire : modération
- Dépôt communautaire : FAQ
- Automatiser l'internalisation des paquets
- Package Internalizer
- Recompiler manuellement un paquet
- Chocolatey.Server : avis de dépréciation
