Auf einem neuen Windows-VPS kostet es Zeit, Git, 7-Zip, die Sysinternals-Werkzeuge und jede Abhängigkeit von Hand zu installieren, und es entstehen Server, die sich leicht voneinander unterscheiden. Mit Chocolatey beschreiben Sie diese Programme, installieren sie unbeaufsichtigt, erkennen veraltete Pakete und spielen dieselbe Grundlage auf einem weiteren VPS ein.
Es geht also nicht darum, zehn choco-Befehle auswendig zu lernen. Das eigentliche Thema ist der Betrieb:
- wie Sie Chocolatey installieren, ohne ein heruntergeladenes Skript blind auszuführen;
- wie Sie einen reproduzierbaren Softwarestand festlegen;
- wie Sie Updates und Neustarts steuern;
- wie Sie erfahren, wer das Paket erstellt hat, das PowerShell mit Administratorrechten ausführt;
- wann Sie das Community-Repository durch ein internes ersetzen;
- was die kostenpflichtigen Editionen wirklich bringen.
Vorgehen, Umfang und Grenzen
Die Verfahren wurden am 31. August 2026 in der offiziellen Dokumentation von Chocolatey CLI, des Chocolatey-Community-Repositorys, von Chocolatey Software und von Microsoft PowerShell geprüft.
Chocolatey CLI 2.x setzt .NET Framework 4.8 voraus. Das Installationsprogramm versucht es nachzuinstallieren, wenn es fehlt, doch dieser Vorgang kann einen Neustart erfordern. Diese Anleitung zielt auf gepflegte Windows-Server-Versionen und eine als Administrator gestartete PowerShell-Konsole.
Ein Community-Paket, sein Betreuer, sein Skript oder die URL der zugrunde liegenden Software können sich nach der Veröffentlichung ändern. Prüfen Sie für den professionellen Einsatz die genaue Version in einer Testumgebung und veröffentlichen Sie sie anschließend in einer von Ihnen kontrollierten Quelle. Auch die genannten Preise und Funktionen ändern sich: Prüfen Sie sie zum Zeitpunkt Ihrer Entscheidung auf den offiziellen Seiten.
Diese Anleitung ersetzt weder die Lizenzen der installierten Software noch eine Richtlinie zum Schwachstellenmanagement, Windows Update, eine Sicherung oder ein Wiederaufbauverfahren, die Anwendungsqualifizierung vor einem Update oder die EDR-, Antiviren-, Proxy- und Firewallkontrollen Ihrer Organisation.
1. Was Chocolatey verwaltet und was nicht
Chocolatey ist ein Paketmanager für Windows. Ein .nupkg-Paket ist ein Archiv auf Basis des NuGet-Formats. Es enthält .nuspec-Metadaten und kann PowerShell-Skripte wie chocolateyInstall.ps1, chocolateyBeforeModify.ps1 oder chocolateyUninstall.ps1 enthalten.
Ein Paket kann Software einbetten, sofern die Weitergaberechte das erlauben, ein MSI, eine EXE oder ein Archiv von der Herstellerseite herunterladen, deren Prüfsumme verifizieren, die unbeaufsichtigte Installation starten, Befehlsverknüpfungen namens Shims anlegen, Abhängigkeiten deklarieren und Konfigurationsschritte ausführen.
Diese Unterscheidung ist wesentlich:
| Element | Verantwortlich |
|---|---|
| die Software selbst | Hersteller der Software |
| das Chocolatey-Community-Paket | ein oder mehrere Betreuer, teils unabhängig vom Hersteller |
| Community-Repository und Moderation | Chocolatey Software und seine Prüfdienste |
| Entscheidung, das Paket zuzulassen | Ihre Organisation |
| internes Repository und Versionsfreigabe | Ihr Betriebsteam |
Chocolatey verwaltet zunächst den Zustand seiner eigenen Pakete. Mit der Open-Source-Edition kann Software, die außerhalb von Chocolatey aktualisiert oder entfernt wurde, zu einer Abweichung zwischen Windows-Zustand und Paketzustand führen. Die lizenzierten Editionen bieten eine Synchronisierung mit Programme und Features, doch diese Funktion entbindet nicht davon, den tatsächlichen Serverzustand zu überwachen.
Chocolatey ersetzt Windows Update nicht
Nutzen Sie Windows Update für das System, die Microsoft-Komponenten und die Betriebssystemkorrekturen. Nutzen Sie Chocolatey für die Software und Werkzeuge, die Sie als Pakete verwalten wollen. Ein Community-Paket, das nach einem Windows-Update benannt ist, darf nicht automatisch Ihre Microsoft-Patchrichtlinie ersetzen.
2. Vertrauensmodell auf einem Server
Eine Chocolatey-Installation verbindet mehrere Glieder:
- das Installationsskript von Chocolatey;
- den installierten
choco-Client; - das konfigurierte Repository;
- das Paket und seine Skripte;
- den Server, von dem das Paket die Software gegebenenfalls herunterlädt;
- das Installationsprogramm des Herstellers;
- die Abhängigkeiten des Pakets.
Eine HTTPS-Verbindung schützt den Transport und authentifiziert den entfernten Server über die Zertifikatskette. Sie belegt weder, dass ein Skript Ihrer Richtlinie entspricht, noch dass sein Verhalten für Ihre Umgebung passend bleibt.
Auf einem VPS laufen Skripte in der Regel mit Administratorrechten. Ein Paket kann daher Dienste, die Registrierung, Umgebungsvariablen, geplante Aufgaben und Systemdateien ändern. Behandeln Sie jede Quelle als Lieferanten privilegierten Codes.
Drei Nutzungsstufen
| Stufe | Quelle | Empfohlene Handhabung |
|---|---|---|
| persönlicher Test | Community-Repository | Prüfung des Pakets und punktuelle Installation |
| kleiner professioneller Bestand | internes Repository, manueller Import | freigegebene Versionen, Manifest und Änderungsprotokoll |
| industrialisierter Bestand | Test- und Produktions-Repositorys, Automatisierung | Internalisierung, CI, Tests, Freigabe, Audit und zentrale Verteilung |
3. Den VPS vorbereiten
Melden Sie sich per RDP oder über Ihren üblichen Verwaltungskanal an. Ist der VPS gerade erst geliefert worden, beginnen Sie mit unserer Anleitung zu den ersten Schritten mit Ihrem Windows-VPS.
Vor Chocolatey: installieren Sie die Windows-Updates, starten Sie bei Bedarf neu, prüfen Sie Uhrzeit und DNS-Auflösung, prüfen Sie den ausgehenden HTTPS-Zugang, öffnen Sie PowerShell als Administrator und erstellen Sie einen vorsorglichen Snapshot, sofern die Plattform es erlaubt.
Erste Erhebung:
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 Der Snapshot erleichtert das Zurücknehmen einer Systemänderung, ersetzt aber keine externe Sicherung. Ein Software-Update kann außerdem Anwendungsdaten ändern, die das Zurücksetzen auf den Snapshot wieder verwerfen würde.
4. Chocolatey mit der offiziellen Methode installieren
Die offizielle Installationsseite nennt diesen PowerShell-Befehl:
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"
)) Der Bereich Process begrenzt die Änderung der Ausführungsrichtlinie auf die aktuelle Konsole. Die Zahl 3072 entspricht in den betreffenden .NET-Versionen TLS 1.2.
Dieser Befehl ist offiziell, lädt aber Code herunter und führt ihn sofort aus. Chocolatey selbst bittet darum, install.ps1 vor der Nutzung zu prüfen. Für ein Vorgehen im Einklang mit unserem Härtungsleitfaden, der davon abrät, ein heruntergeladenes Skript ungelesen auszuführen, bevorzugen Sie das folgende Verfahren.
5. Das Skript herunterladen, lesen und dann ausführen
Legen Sie ein Arbeitsverzeichnis an und laden Sie das Skript herunter, ohne es auszuführen:
$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 Prüfen Sie die Datei:
Get-Item $InstallScript |
Format-List FullName, Length, CreationTimeUtc,
LastWriteTimeUtc
Get-FileHash -Path $InstallScript -Algorithm SHA256
Get-Content -Path $InstallScript Sie können sie auch im Editor öffnen:
notepad.exe $InstallScript Worauf Sie bei der Durchsicht achten
Prüfen Sie insbesondere die URL, von der das Chocolatey-Paket geladen wird, die abgefragten Umgebungsvariablen, die angelegten Pfade, Änderungen an PATH, weitere Downloads oder ausführbare Dateien, dynamische PowerShell-Aufrufe sowie das Fehlen unerwarteter Ziele oder Befehle.
Die festgehaltene SHA-256-Prüfsumme belegt, dass dieselbe Datei geprüft und ausgeführt wurde. Sie authentifiziert das Skript für sich genommen nicht, solange sie nicht mit einem über einen unabhängigen Kanal veröffentlichten Wert verglichen wird. HTTPS-Prüfung und inhaltliche Durchsicht bleiben daher nötig.
Führen Sie die lokale Datei nach interner Freigabe aus:
Set-ExecutionPolicy Bypass -Scope Process -Force
& $InstallScript
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
$env:Path += ";$env:ProgramData\chocolatey\bin"
}
choco --version Die dauerhafte Ausführungsrichtlinie des Rechners wurde nicht abgesenkt. Das Schließen der Konsole hebt den auf Process-Ebene gesetzten Bypass auf.
Für professionelle Automatisierung
Laden Sie nicht bei jeder Servererstellung stillschweigend die aktuelle install.ps1 erneut herunter. Nach der Freigabe:
- archivieren Sie das freigegebene Skript oder das offizielle MSI in Ihrem Artefakt-Repository;
- halten Sie dessen SHA-256 und die Chocolatey-Version fest;
- richten Sie das Bootstrap auf diese interne Kopie aus;
- prüfen Sie eine neue Version, bevor Sie die alte ersetzen;
- entfernen Sie die Community-Quelle von Produktionsservern, wenn sie nicht nötig ist.
Chocolatey bietet seit Version 2.0.0 auch ein MSI an. Die Dokumentation stellt klar, dass dieses MSI dem Bootstrap dient: Es installiert Chocolatey, kann den Client aber weder aktualisieren noch deinstallieren.
6. Die Installation prüfen
Der Standardpfad lautet C:\ProgramData\chocolatey. Chocolatey gibt an, dass die Berechtigungen dort für Administratoren gehärtet sind. Wählen Sie mit ChocolateyInstall einen anderen Ort, verlangt die Dokumentation, dass Sie die ACLs selbst verwalten.
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 Prüfen Sie mindestens:
| Kontrolle | Erwartetes Ergebnis |
|---|---|
choco --version | eine Versionsnummer, ohne Fehler |
| aufgelöster Befehl | Binärdatei unterhalb des Chocolatey-Verzeichnisses |
| Installationsordner | nur für die vorgesehenen Identitäten beschreibbar |
| Community-Quelle | nur vorhanden, wenn Ihre Richtlinie es erlaubt |
| Protokoll | C:\ProgramData\chocolatey\logs\chocolatey.log |
Machen Sie C:\ProgramData\chocolatey nicht für Standardbenutzer beschreibbar: Sie könnten ein Shim, ein Skript oder ein Paket ersetzen, das später mit erhöhten Rechten ausgeführt wird. Unsere Anleitung zum Konfigurieren der Windows-Server-Firewall auf einem VPS ergänzt diese Härtung auf Netzseite.
7. Verstehen, wer die Community-Pakete veröffentlicht
Das Repository community.chocolatey.org enthält Pakete, die von Mitgliedern der Community erstellt wurden. Der Betreuer des Pakets ist nicht zwangsläufig der Hersteller der Software. Die FAQ des Community-Repositorys unterscheidet ausdrücklich zwischen dem Support des Pakets durch seine Betreuer und dem Support der Software durch ihren Hersteller.
Seit Oktober 2014 durchläuft jede Version jedes eingereichten Pakets vor der Veröffentlichung ein Moderationsverfahren. Laut der Sicherheitsdokumentation von Chocolatey und der Moderationsdokumentation kann dieses Verfahren eine automatische Qualitätsprüfung, eine Installations- und Deinstallationsprüfung, eine VirusTotal-Analyse, eine menschliche Prüfung für Pakete ohne Vertrauensstatus sowie Herkunfts- und Prüfsummenkontrollen der Binärdateien umfassen.
Ein Paket im Status „trusted“ kann nach den automatischen Prüfungen ohne erneute menschliche Durchsicht freigegeben werden, sofern nichts auffällt. Die Moderation verringert das Risiko; sie macht aus einem Community-Repository jedoch keine von Ihnen kontrollierte Quelle.
Chocolatey weist außerdem darauf hin, dass sein Paketscanner standardmäßig nur en-US-Installationsprogramme testet. Ein Paket kann in der Prüfumgebung funktionieren und mit einer anderen Sprache, einer anderen Architektur, einem Proxy, einem ausstehenden Neustart oder einer besonderen Serverkonfiguration scheitern.
Ein Paket vor der Installation prüfen
Beginnen Sie mit den Metadaten:
choco info 7zip
choco info git
choco info sysinternals Prüfen Sie auf der Paketseite die Identität der Betreuer, den Link zum Quellcode des Pakets, den Status von Validierung, Verifizierung und Analyse, den Versionsverlauf, den Abschnitt Files, die Datei chocolateyInstall.ps1, die geladenen URLs, die angegebenen Prüfsummen, die Abhängigkeiten sowie die Parameter und Argumente für die unbeaufsichtigte Installation.
Die offizielle FAQ erklärt, dass die Datei .nupkg heruntergeladen, in .zip umbenannt und zur Prüfung entpackt werden kann. Untersuchen Sie genau dieses Paket, nicht nur den Hauptzweig seines Quell-Repositorys: Der Zweig kann sich seit der Veröffentlichung geändert haben.
Was VirusTotal nicht garantiert
Ein Ergebnis ohne Fund ist kein Nachweis der Unbedenklichkeit. Es prüft weder die PowerShell-Logik noch die Absicht des Betreuers, die Lizenzkonformität oder das künftige Verhalten einer entfernten URL. Der Malware-Schutz zur Laufzeit der Editionen Pro und Business betrifft Dateien, die während der Installation aus einer externen Quelle geladen werden; Chocolatey stellt klar, dass direkt in ein Paket eingebettete Binärdateien von dieser Funktion zu diesem Zeitpunkt nicht geprüft werden.
8. Werkzeuge installieren, ohne den Server zum Arbeitsplatz zu machen
Auf einem Server vergrößert jede Software den Wartungsaufwand. Installieren Sie nur die Werkzeuge, die die Rolle des VPS erfordert.
Beispiel einer ausdrücklichen Installation mit Prüfung jedes Ergebnisses:
$PackageIds = @(
"7zip",
"git",
"sysinternals"
)
foreach ($PackageId in $PackageIds) {
& choco install $PackageId --yes --no-progress
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Installation von $PackageId fehlgeschlagen: Code $InstallCode"
}
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "$PackageId installiert; Neustart erforderlich."
}
}
choco list Die Codes 1641 und 3010 bedeuten Erfolg mit eingeleitetem beziehungsweise erforderlichem Neustart. Chocolatey definiert 0, 1605, 1614, 1641 und 3010 ausdrücklich als gültige Exit-Codes. Ein Skript, das jeden Code ungleich null als Fehler wertet, würde daher manche Installationen fälschlich als fehlgeschlagen melden.
Verwenden Sie --force nicht standardmäßig. Die Befehlsdokumentation von Chocolatey erklärt, dass diese Option Schutzmechanismen umgeht, und rät in gewöhnlichen Skripten davon ab.
9. Die Installation reproduzierbar machen
Eine aus der PowerShell-Historie kopierte Befehlsfolge ist noch keine reproduzierbare Konfiguration. Festzuhalten sind die genaue Paketkennung, die freigegebene Version, die zulässige Quelle, die Paketparameter, die an das Installationsprogramm übergebenen Argumente, der Rückgabecode, der Neustartbedarf und ein Funktionstest nach der Installation.
Den Zustand eines Referenz-VPS exportieren
Der Befehl choco export erzeugt eine Datei packages.config. Auf einem bereits freigegebenen Referenzrechner:
$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 Legen Sie dieses Manifest in Ihr Konfigurations-Repository, zusammen mit einer Codeprüfung, einer Änderungsnummer, dem Freigabedatum, der Testumgebung und der zugehörigen internen Quelle.
Betrachten Sie den Export nicht als vollständige Sicherung. Er erfasst nicht zwingend die Parameter jeder Installation, die Anwendungseinstellungen, Geheimnisse, Daten oder außerhalb von Chocolatey installierte Software.
Das Manifest erneut abspielen
Auf einem neuen VPS:
$ManifestPath = "C:\Ops\Chocolatey\packages.config"
$ApprovedSource = "internal-production"
if (-not (Test-Path $ManifestPath)) {
throw "Chocolatey-Manifest nicht gefunden: $ManifestPath"
}
$Arguments = @(
"install",
$ManifestPath,
"--source=$ApprovedSource",
"--yes",
"--no-progress"
)
& choco @Arguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Software-Bootstrap fehlgeschlagen: Code $InstallCode"
} Feste Versionen sind keine Wartung
Eine festgeschriebene Version macht einen Wiederaufbau vorhersehbar, kann aber auch eine Schwachstelle konservieren. Der richtige Zyklus lautet:
- eine neue Version erkennen;
- das Paket und seine Ressourcen importieren;
- die Änderungen prüfen;
- Installation, Aktualisierung und Neustart testen;
- die Version freigeben;
- das Manifest anpassen;
- in Wellen verteilen;
- die alte Version während des Rückfallfensters aufbewahren.
10. Software aktualisieren ohne blindes „upgrade all“
Veraltete Pakete anzeigen:
choco outdated Ein bestimmtes Paket nach Prüfung aktualisieren:
choco upgrade git -y --no-progress
$UpgradeCode = $LASTEXITCODE
if ($UpgradeCode -notin @(0, 1641, 3010)) {
throw "Git-Aktualisierung fehlgeschlagen: Code $UpgradeCode"
} Auf eine freigegebene Version aktualisieren:
$ApprovedVersion = "GEPRUEFTE_VERSION"
$UpgradeArguments = @(
"upgrade",
"git",
"--version=$ApprovedVersion",
"--source=internal-production",
"--yes",
"--no-progress"
)
& choco @UpgradeArguments Der Wert GEPRUEFTE_VERSION ist bewusst ein Platzhalter: Ersetzen Sie ihn durch die tatsächlich qualifizierte und in Ihrem Repository vorhandene Version.
Warum eine automatische Gesamtaktualisierung in der Produktion zu vermeiden ist
Der folgende Befehl existiert:
choco upgrade all -y Auf einem Testrechner oder einem unkritischen Arbeitsplatz kann er vertretbar sein. Auf einem Produktions-VPS kann er gleichzeitig eine Laufzeitumgebung, ein von einem Dienst genutztes Werkzeug, eine Abhängigkeit und Chocolatey selbst aktualisieren. Bei einem Fehlschlag wird die Ursache der Regression schwerer einzugrenzen.
Bevorzugen Sie ein Wartungsfenster, einen vorsorglichen Snapshot, eine Liste freigegebener Versionen, Aktualisierungen in stimmigen Paketen, Anwendungstests, einen kontrollierten Neustart und eine schrittweise Verteilung über mehrere Server.
Die Chocolatey-Dokumentation weist ferner darauf hin, dass eine Gesamtaktualisierung Abhängigkeiten in einem widersprüchlichen Zustand hinterlassen kann, wenn ein Teil der Kette scheitert. Beginnen Sie dann mit dem Paket oder der Abhängigkeit, die in der Fehlermeldung ausdrücklich genannt wird.
Ein Paket vorübergehend festschreiben
choco pin add --name=git
choco pin list
choco pin remove --name=git Ein Pin ist eine vorübergehende Maßnahme, keine Sicherheitsstrategie. Verbinden Sie ihn mit einem Grund, einem Ticket, einer verantwortlichen Person und einem Termin zur erneuten Prüfung.
11. Einen Update-Bericht erstellen, ohne den Server zu verändern
Für eine einfache Überwachung aktivieren Sie die erweiterten Exit-Codes:
choco feature enable --name=useEnhancedExitCodes Mit dieser Funktion liefert choco outdated:
| Code | Bedeutung |
|---|---|
| 0 | keine veralteten Pakete |
| 2 | mindestens ein veraltetes Paket |
| 1 oder -1 | ein Fehler ist aufgetreten |
Auditskript, ohne 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 "Keine Chocolatey-Updates erkannt."
}
2 {
Write-Warning "Updates sind verfuegbar: $ReportPath"
}
default {
throw "Chocolatey-Audit fehlgeschlagen: Code $ExitCode"
}
} Planen Sie diese Prüfung mit Ihrem Überwachungswerkzeug, einer GPO, einem Scheduler oder einer Windows-Aufgabe. Machen Sie aus diesem Bericht nicht automatisch ein upgrade all ohne Freigabe.
12. Warum eine Organisation ein eigenes Repository nutzen sollte
Chocolatey Software schreibt ausdrücklich, dass eine Organisation das Community-Repository nicht unmittelbar als Produktionsquelle verwenden sollte. Der Leitfaden zur automatisierten Internalisierung nennt drei Gründe:
- Vertrauen: externe Ersteller und Betreuer stehen nicht unter der Kontrolle der Organisation;
- Stabilität: Pakete und Downloads müssen während des Betriebs verfügbar bleiben;
- Kontrolle: Tests, Freigabe und Veröffentlichung sollten der Organisation gehören.
Ein privates Repository erlaubt außerdem, die tatsächlich eingesetzten Versionen vorzuhalten, nicht mehr von einer geänderten oder entfernten Hersteller-URL abzuhängen, die von den VPS erlaubten Internetdomänen zu reduzieren, eine Binärdatei vor der Verteilung zu qualifizieren, eigene Konfigurationspakete zu erstellen, in einem abgeschotteten Netz zu arbeiten, Import, Test und Produktion zu trennen und jede Freigabe mit einer Prüfung und einem Änderungsdatensatz zu verbinden.
Empfohlene Architektur
| Stufe | Funktion |
|---|---|
| Community- oder Herstellerquelle | externer Ursprung, nie unmittelbar von der Produktion genutzt |
| Internalisierung | Abruf des Pakets und seiner Ressourcen |
| Git-Repository | Skripte, Manifeste, Prüfsummen und Prüfhistorie |
| Chocolatey-Test-Repository | Installation auf einem repräsentativen Server |
| Kontrollen | Antivirus, Signaturen, Prüfsummen, Funktionstests und Neustart |
| Chocolatey-Produktions-Repository | ausschließlich freigegebene Versionen |
| VPS | Lesezugriff auf das Produktions-Repository |
Verwenden Sie für die Clients eine Identität mit reinem Lesezugriff. Behalten Sie das Veröffentlichungsrecht der CI oder einer eigenen Identität vor. Legen Sie niemals ein Veröffentlichungstoken in das Bootstrap-Skript eines VPS.
Kompatible Repositorys
Die Chocolatey-Dokumentation nennt unter anderem Inedo ProGet, Sonatype Nexus Repository, JFrog Artifactory, eine kompatible NuGet-Quelle und in bestimmten Fällen eine interne Dateifreigabe.
Das ältere Produkt Chocolatey.Server ist veraltet. Chocolatey empfiehlt den Wechsel zu einer Drittlösung und nennt ProGet, Nexus oder Artifactory. Starten Sie daher kein neues Projekt rund um Chocolatey.Server.
Open Source oder Business für das interne Repository?
Die Open-Source-Edition kann mehrere Quellen nutzen, Pakete erstellen und ein privates Repository verwenden. Sie erlaubt auch eine manuelle Internalisierung: Paket herunterladen, Ressourcen beschaffen, Skripte anpassen, neu kompilieren und veröffentlichen.
Chocolatey for Business automatisiert diese Arbeit mit dem Package Internalizer: Der Client lädt das Paket und seine externen Ressourcen, schreibt die Verweise um und kompiliert ein Paket, das ohne Internetzugang nutzbar ist. Die Funktion spart Zeit, doch die Entscheidung über Freigabe und Test bleibt bei Ihnen.
13. Eine interne Quelle einrichten
Beispiel mit einer fiktiven HTTPS-Quelle:
$SourceArguments = @(
"source",
"add",
"--name=internal-production",
"--source=https://packages.example.net/nuget/chocolatey/v2",
"--priority=1"
)
& choco @SourceArguments
choco source list Eine niedrigere Prioritätszahl wird vor einer höheren ausgewertet. Prüfen Sie das Ergebnis stets mit choco source list.
Nachdem Sie bestätigt haben, dass das interne Repository Chocolatey und alle nötigen Pakete enthält, deaktivieren Sie das Community-Repository:
choco source disable --name=chocolatey
choco source list Für eine vollständig abgeschottete Umgebung empfiehlt die Chocolatey-Dokumentation, die Community-Quelle zu entfernen:
choco source remove --name=chocolatey Das Deaktivieren lässt sich leichter rückgängig machen; das Entfernen verhindert, dass eine unkontrollierte Reaktivierung die Quelle wieder einbringt. Entscheiden Sie nach Ihrer Konfigurationsverwaltung.
Authentifizierung und Geheimnisse
Chocolatey unterstützt die Authentifizierung per Benutzername und Passwort sowie X.509-Clientzertifikate. Der Befehl source add verschlüsselt das Passwort in der Konfigurationsdatei, doch ein auf einer Befehlszeile übergebenes Geheimnis kann durch andere Protokollierungs- oder Inventarmechanismen sichtbar werden.
Bewährtes Vorgehen: Nutzen Sie auf den VPS ein technisches Konto mit Lesezugriff, bevorzugen Sie ein kurzlebiges Token oder ein Clientzertifikat, sofern das Repository es unterstützt, holen Sie das Geheimnis zum Zeitpunkt der Bereitstellung aus einem Tresor, legen Sie es weder in Git noch in packages.config oder das Vorlagenabbild, trennen Sie Lese- und Veröffentlichungsidentitäten und erneuern Sie die Geheimnisse samt Test des Widerrufs.
14. Die Editionen vergleichen, ohne sie schönzureden
Funktionen und Preise können sich ändern. Die folgende Tabelle gibt die offiziellen Seiten Compare Chocolatey Editions und Pricing wieder, abgerufen am 31. August 2026.
| Edition | Zielgruppe | Was sie in diesem Leitfaden bringt | Zu beachtende Grenze |
|---|---|---|---|
| Open Source | Privatpersonen und Organisationen | Paketverwaltung, Paketerstellung, mehrere Quellen, privates Repository, Gesamtaktualisierung | Internalisierung und fortgeschrittene Steuerung selbst aufzubauen |
| Pro | eine natürliche Person, namentliche Lizenz | Open-Source-Funktionen sowie CDN-Cache, Malware-Schutz zur Laufzeit, Synchronisierung und Komfortfunktionen | persönliche, namentliche Lizenz; bis zu 8 persönliche Rechner |
| Business (C4B) | Organisationen | Package Internalizer, Central Management, Audit, Self-Service, vollständige Synchronisierung und Verteilfunktionen | Kosten pro Knoten, Infrastruktur und Prozesse im Betrieb |
Angezeigte Preise am 31. August 2026
- Open Source: kostenlos, ohne Begrenzung der Rechnerzahl;
- Pro: 96 Dollar pro Jahr, persönliche namentliche Lizenz, bis zu 8 persönliche Rechner;
- Business: ab 18 Dollar je Lizenz und Jahr;
- die Preisseite nennt ein Business-Jahresabonnement ab 1 800 Dollar pro Jahr, entsprechend einem Minimum von 100 Knoten zu 18 Dollar je Knoten und Jahr, mit Mengenrabatten ab 500 Knoten.
Prüfen Sie die offizielle Seite zum Zeitpunkt des Kaufs. Steuern, Angebote, Rabatte, Premium-Support und Vertragsbedingungen können die tatsächlichen Kosten verändern.
Eine sinnvolle Wahl nach Größe
| Situation | Oft ausreichende Wahl |
|---|---|
| ein oder wenige VPS, ein Team, das seine Pakete pflegen kann | Open Source mit privatem Repository und manuellem Import |
| rein persönliche Nutzung | Open Source oder Pro, je nach gewünschten Funktionen |
| Unternehmensbestand mit häufigem Import externer Pakete | Business, wegen Internalizer und Audit zu prüfen |
| Self-Service für Benutzer ohne Administratorrechte nötig | Business |
| zentrales Konformitäts-Dashboard nötig | Business oder ein bereits vorhandenes Verwaltungswerkzeug |
Business macht Pakete nicht automatisch sicher. Es erleichtert Internalisierung, zentrale Kontrolle und Audit. Verfügt die Organisation bereits über ein NuGet-Repository, eine CI, ein EDR und ein Konfigurationswerkzeug, kann die Open-Source-Edition für einen kleinen, sauber betriebenen Bereich genügen.
15. Reproduzierbares Bootstrap-Skript
Das folgende Skript wählt die Software nicht für Sie aus. Es verlangt ein vorhandenes Manifest, eine bereits konfigurierte Chocolatey-Quelle, eine freigegebene Bootstrap-URL und die erwartete SHA-256-Prüfsumme des Installationsskripts.
In einer ausgereiften Produktion sollte BootstrapUri auf Ihre geprüfte interne Kopie zeigen.
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 "Manifest nicht gefunden: $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 "Ungueltige Bootstrap-Pruefsumme."
}
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 "Chocolatey-Quelle fehlt: $SourceName"
}
$InstallArguments = @(
"install",
$ManifestPath,
"--source=$SourceName",
"--yes",
"--no-progress"
)
& choco @InstallArguments
$InstallCode = $LASTEXITCODE
if ($InstallCode -notin @(0, 1641, 3010)) {
throw "Installation des Manifests fehlgeschlagen: Code $InstallCode"
}
& choco list
if ($InstallCode -in @(1641, 3010)) {
Write-Warning "Bootstrap beendet; Neustart erforderlich."
} Das Skript ist bei der Installation des Clients idempotent: Es installiert Chocolatey nicht erneut, wenn der Befehl bereits vorhanden ist. Die Reproduzierbarkeit ergibt sich vor allem aus dem versionierten Manifest, der unveränderlichen internen Quelle und den Tests nach der Installation.
Empfohlene Verbesserungen für einen Bestand: Authenticode-Signatur Ihres Bootstrap-Skripts, Ausführung aus einem Referenzabbild oder einem Konfigurationswerkzeug, Übertragung des Protokolls in einen zentralen Speicher, eindeutige Bereitstellungskennung, Prüfung des Speicherplatzes, Erkennung eines bereits ausstehenden Neustarts, ein rollenspezifischer Anwendungstest und eine Sperre gegen zwei gleichzeitige Bereitstellungen.
16. Proxy, Cache und Netzzugang
Mit dem Community-Repository muss der VPS community.chocolatey.org, die Paketinfrastruktur von Chocolatey und die Domänen jedes Herstellers erreichen, von denen die Skripte die Binärdateien laden.
Diese letzte Abhängigkeit erklärt, warum es nicht immer genügt, in einem Proxy nur die Chocolatey-Domäne freizugeben. Ein internes Repository mit internalisierten Ressourcen verringert die Zahl externer Ziele deutlich.
Konfiguration anzeigen:
choco config list
choco source list Einen expliziten Proxy ohne Authentifizierung einrichten:
choco config set --name=proxy --value=http://proxy.example.net:8080 Diese Einstellung entfernen:
choco config unset --name=proxy Schreiben Sie bei einem authentifizierten Proxy das Passwort nicht in ein Skript oder ein Ticket. Injizieren Sie es aus einem Tresor und prüfen Sie, welche Spuren der Befehlszeile Ihr EDR erfasst.
Den Cache verschieben
Chocolatey nutzt für Downloads standardmäßig ein temporäres Verzeichnis. Auf einem VPS mit kleiner Systemplatte können Sie einen eigenen Cache festlegen:
$CachePath = "D:\ChocolateyCache"
New-Item -Path $CachePath -ItemType Directory -Force |
Out-Null
choco config set --name=cacheLocation --value=$CachePath
choco config get --name=cacheLocation Existiert das Volume D: nicht, wählen Sie einen realen Pfad. Schützen Sie dieses Verzeichnis vor Schreibzugriffen unbefugter Benutzer und legen Sie eine Bereinigungsrichtlinie fest. Ein Cache kann ausführbare Installationsprogramme enthalten; er ist kein harmloser Ordner.
17. Protokolle, Inventar und Änderungsnachweis
Das Hauptprotokoll liegt normalerweise hier:
$ChocolateyLog = "C:\ProgramData\chocolatey\logs\chocolatey.log"
Get-Content $ChocolateyLog -Tail 200 Um ein Protokoll für einen einzelnen Vorgang zu ergänzen:
$ChangeId = "CHG-2026-0001"
$OperationLog = "C:\Ops\Chocolatey\$ChangeId.log"
$Arguments = @(
"upgrade",
"git",
"--yes",
"--no-progress",
"--log-file=$OperationLog"
)
& choco @Arguments Bewahren Sie zu jeder Produktionsänderung auf:
| Nachweis | Beispiel |
|---|---|
| Zustand vorher | choco list und Softwareversion |
| Anforderung | Ticket oder Manifest-Commit |
| Quelle | Repository und freigegebene Version |
| Befehl | Argumente ohne Geheimnisse |
| Ergebnis | Exit-Code und nützliche Auszüge |
| Neustart | erforderlich, durchgeführt und Uhrzeit |
| Validierung | Dienst gestartet, Port oder Funktionstest |
| Zustand nachher | neue Version und normale Überwachung |
Veröffentlichen Sie kein Rohprotokoll, ohne es gelesen zu haben: Eine URL, ein Benutzername, ein Token oder ein sensibler Pfad kann darin auftauchen.
18. Deinstallieren und zurückrollen
Ein Paket deinstallieren:
choco uninstall git -y --no-progress
$UninstallCode = $LASTEXITCODE
if ($UninstallCode -notin @(0, 1605, 1614, 1641, 3010)) {
throw "Deinstallation fehlgeschlagen: Code $UninstallCode"
} Chocolatey dokumentiert den Code 1605 für nicht vorhandene Software und 1614 für ein bereits deinstalliertes Produkt. Das tatsächliche Ergebnis hängt vom Paketskript und vom Deinstallationsprogramm des Herstellers ab.
Ein Rückschritt auf eine ältere Version ist nicht immer ein verlässlicher Rückweg: Ein Installationsprogramm kann eine ältere Version ablehnen, ein Konfigurations- oder Datenformat kann migriert sein, ein Dienst kann die alte Binärdatei nicht mehr annehmen, und ein Paket bietet unter Umständen kein vollständiges Deinstallationsskript.
Bereiten Sie für einen kritischen VPS drei Ebenen vor:
- Neuinstallation des vorherigen Pakets aus dem internen Repository;
- Wiederherstellung kompatibler Konfigurationen und Daten;
- Wiederaufbau des VPS aus Manifest und Sicherungen.
Der vorsorgliche Snapshot kann die Wiederherstellungszeit verkürzen, doch seine Rücksicherung verwirft auch die seither erfolgten Schreibvorgänge. Legen Sie vor dem Fenster fest, was gesondert gesichert werden muss, wie es unsere Anleitung zum Sichern eines Windows-VPS beschreibt.
19. Fehlersuche
Der Befehl choco wird nicht erkannt
Öffnen Sie eine neue Konsole oder aktualisieren Sie den PATH der Sitzung:
$env:Path += ";$env:ProgramData\chocolatey\bin"
Get-Command choco
choco --version Wurde ein benutzerdefinierter Pfad ChocolateyInstall verwendet, passen Sie den Wert an.
TLS-Fehler oder geschlossene Verbindung
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Test-NetConnection community.chocolatey.org -Port 443 Prüfen Sie außerdem Datum und Uhrzeit, die DNS-Auflösung, den Proxy, eine TLS-Inspektion, die Zertifikatskette, die ausgehenden Regeln und das Vorhandensein von .NET Framework 4.8.
Verwenden Sie keine Option, die Zertifikatsfehler ignoriert. Reparieren Sie stattdessen die Vertrauenskette oder den Proxy.
Die Ausführungsrichtlinie blockiert das Bootstrap
Get-ExecutionPolicy -List
Set-ExecutionPolicy Bypass -Scope Process -Force Eine GPO kann gegenüber dieser Einstellung weiterhin Vorrang haben. Nutzen Sie in diesem Fall das von der Organisation zugelassene Verteilverfahren, etwa ein freigegebenes MSI oder ein signiertes Skript.
Prüfsummenfehler
Ignorieren Sie den Fehler nicht, um die Installation „durchzubekommen“. Er kann auf eine neue Version unter derselben URL, ein noch nicht aktualisiertes Paket, eine Interception oder einen Zwischencache, einen unvollständigen Download oder eine tatsächlich andere Ressource als die geprüfte hinweisen.
Vergleichen Sie die Binärdatei des Herstellers, das Paketskript, die Version und die Prüfsumme. Warten Sie auf eine korrigierte Version oder internalisieren Sie die freigegebene Binärdatei.
Das Paket ist installiert, die Software aber nicht
Mit der Open-Source-Edition kann der Paketzustand von Programme und Features abweichen, wenn die Software außerhalb von Chocolatey verändert wurde.
choco list
Get-Package |
Sort-Object Name |
Select-Object Name, Version, ProviderName Prüfen Sie danach den Dienst, die ausführbare Datei oder den softwareeigenen Registrierungsschlüssel. Erklären Sie den Server nicht allein aufgrund der Ausgabe von choco list für konform.
Eine interne Quelle ist eingerichtet, das Community-Repository wird dennoch genutzt
choco source list Prüfen Sie die Prioritäten, die Verfügbarkeit des internen Pakets und die Argumente --source. Deaktivieren oder entfernen Sie für eine geschlossene Produktion die Community-Quelle ausdrücklich.
Ein Update verlangt einen Neustart
Starten Sie einen Produktionsserver nicht sofort aus einem allgemeinen Skript neu. Melden Sie den Code 1641 oder 3010, führen Sie die möglichen Prüfungen zu Ende, starten Sie dann im vorgesehenen Fenster neu und validieren Sie die Dienste.
Wo lese ich den ausführlichen Fehler?
Get-Content "C:\ProgramData\chocolatey\logs\chocolatey.log" -Tail 300 Suchen Sie zuerst den ersten aussagekräftigen Fehler und das darin genannte abhängige Paket. Die folgenden Warnungen können bloße Folgen sein.
20. Bewährte Praxis auf einem Windows-VPS
- installieren Sie keine Werkzeuge, die die Serverrolle nicht braucht;
- nutzen Sie eine Administratorkonsole nur während des Vorgangs;
- begrenzen Sie die Richtlinie
Bypassauf den Prozess; - prüfen Sie das Bootstrap vor der ersten Ausführung;
- prüfen Sie die Skripte neuer oder heikler Pakete;
- verwenden Sie geprüfte Versionen aus einem internen Repository;
- trennen Sie Test- und Produktions-Repository;
- deaktivieren Sie das Community-Repository in der Produktion;
- legen Sie die Geheimnisse des Repositorys nicht in Git;
- behandeln Sie Neustart-Codes als noch abzuschließende Erfolge;
- führen Sie
outdatedregelmäßig aus, ohne blinde automatische Aktualisierung; - testen Sie die Funktion der Software nach der Installation;
- zentralisieren Sie Protokolle und Inventar;
- überprüfen Sie die Pins regelmäßig;
- testen Sie einen vollständigen Wiederaufbau des VPS.
Häufige Fragen
Ist Chocolatey für ein Unternehmen kostenlos?
Ja. Die offizielle Preisseite stellt die Open-Source-Edition als kostenlos dar, nutzbar durch Organisationen und ohne Begrenzung der Rechnerzahl. Die Business-Funktionen sind kostenpflichtig, doch ein privates Repository erfordert für sich genommen nicht die Business-Edition.
Darf Chocolatey Pro auf den VPS eines Unternehmens eingesetzt werden?
Nein, laut der offiziellen Preisseite. Pro wird als persönliche, namentliche Lizenz für die eigenen Rechner der Nutzerin oder des Nutzers dargestellt, begrenzt auf acht. Eine Organisation sollte Open Source wählen oder Business prüfen.
Werden Community-Pakete von den Softwareherstellern veröffentlicht?
Nicht zwingend. Sie werden von Community-Betreuern erstellt, mitunter vom Hersteller selbst, mitunter von Dritten. Prüfen Sie die Seite jedes Pakets.
Garantiert die Moderation, dass ein Paket sicher ist?
Nein. Sie ergänzt je nach Status des Pakets Validierung, Verifizierung, Analyse und Durchsicht. Sie verringert das Risiko, ersetzt aber weder die interne Freigabe noch die Skriptprüfung und den Test der genauen Version.
Warum install.ps1 lesen, wenn die URL offiziell ist?
Weil der offizielle Befehl PowerShell mit erhöhten Rechten herunterlädt und ausführt. Chocolatey empfiehlt diese Prüfung selbst. Sie erlaubt außerdem, die Prüfsumme des tatsächlich freigegebenen Codes festzuhalten.
Sollte man jede Nacht choco upgrade all ausführen?
Nicht auf einem Produktionsserver ohne Tests. Nutzen Sie choco outdated zur Erkennung, qualifizieren Sie die Versionen und verteilen Sie dann mit Fenster, Tests und Neustartsteuerung.
Genügt eine packages.config, um einen VPS zu klonen?
Nein. Sie beschreibt die Pakete, aber nicht alle Konfigurationen, Daten, Geheimnisse, Windows-Rollen, Firewallregeln, Zertifikate oder geplanten Aufgaben. Betten Sie sie in ein umfassenderes Konfigurationsverfahren ein.
Welches interne Repository soll man wählen?
Wählen Sie ein NuGet-kompatibles Produkt, das Ihr Team sichern, aktualisieren und überwachen kann. Chocolatey nennt ProGet, Nexus und Artifactory. Chocolatey.Server ist veraltet.
Ersetzt Chocolatey Winget?
Beide können nebeneinander bestehen, doch mehrere Paketmanager erhöhen das Risiko abweichender Zustände. Legen Sie je Software eine verantwortliche Stelle fest und vermeiden Sie, dass dasselbe Programm ohne klare Regel von Chocolatey, Winget und seinem eigenen Updater aktualisiert wird.
Betriebs-Checkliste
- Windows Server und .NET Framework sind aktuell;
- die verwendete Konsole ist erhöht;
- das offizielle Skript wurde vor der Ausführung heruntergeladen;
- Inhalt und SHA-256 wurden aufbewahrt;
- die Ausführungsrichtlinie wurde nur auf Process-Ebene geändert;
- der Chocolatey-Pfad hat restriktive ACLs;
- jedes Paket hat eine verantwortliche Stelle und eine Begründung;
- Betreuer, Skripte, URLs und Prüfsummen wurden geprüft;
- die Versionen sind in einem Manifest festgehalten;
- die Installationsparameter sind gesondert dokumentiert;
- die Produktionsquelle ist intern;
- die Community-Quelle ist in der Produktion deaktiviert oder entfernt;
- Lese- und Veröffentlichungsidentitäten sind getrennt;
- Geheimnisse stehen nicht in den Skripten;
- die Codes 1641 und 3010 werden behandelt;
- Updates werden vor der Verteilung getestet;
- ein
outdated-Bericht wird regelmäßig erzeugt; - die Protokolle werden aufbewahrt;
- Wiederherstellung und Wiederaufbau wurden getestet.
Weiterführende Anleitungen
Dieser Leitfaden greift mit unseren anderen Windows-Artikeln ineinander: erste Schritte mit Ihrem Windows-VPS für den Einstieg, Windows-Server-Firewall konfigurieren für die Netzrichtlinie, IIS installieren, wenn der VPS eine Website betreibt, Active Directory installieren für einen Domänencontroller und Windows-VPS sichern vor jedem heiklen Eingriff.
Wichtigste technische Quellen
Installation und Befehle
- Chocolatey CLI: Setup und Installation
- Chocolatey CLI: Befehle
- Install
- Upgrade
- Outdated
- Export
- Pin
- Source
- Config
- Uninstall
Pakete, Vertrauen und Repositorys
- Chocolatey: Sicherheit
- Community-Repository: Moderation
- Community-Repository: FAQ
- Internalisierung von Paketen automatisieren
- Package Internalizer
- Pakete manuell neu kompilieren
- Chocolatey.Server: Hinweis zur Abkündigung
