Windows-Clients und -Server lassen sich effizient und automatisiert mit Software versorgen – auch ohne dabei als Admin auf SCCM oder Intune zurückgreifen zu müssen. Ansible und Chocolatey bieten eine kostenlose, flexible Alternative für Unternehmen, die auf teure Managementplattformen verzichten möchten. Unser Workshop zeigt, wie Sie Softwareverteilung und Updates standardisieren, Fehlerquellen reduzieren und gleichzeitig Zeit sparen.
IT-Teams stehen vor der Herausforderung, Windows-Systeme zuverlässig und sicher mit Software zu bespielen. Klassische Lösungen wie SCCM oder Intune sind leistungsfähig, bringen aber hohe Lizenzkosten und administrative Komplexität mit sich. Besonders in kleinen und mittelständischen Unternehmen stellt sich daher die Frage: Geht es auch ohne große Investitionen? Die Antwort: Ja – mit Ansible und Chocolatey.
Ansible steuert dabei die gesamte Automatisierung über sogenannte Playbooks. Diese definieren exakt, welche Anwendungen auf welchen Geräten landen. Chocolatey wiederum agiert als Paketmanager und übernimmt die Installation, Aktualisierung und Entfernung von Software – zentral gesteuert über Ansible. Durch diesen kombinierten Ansatz entfällt der manuelle Installationsaufwand. Ein einziger Playbook-Lauf reicht, um hunderte Systeme konsistent mit Software zu versorgen. Das Ergebnis: mehr Kontrolle, weniger Fehler und eine sicherere IT-Umgebung.
Der Einstieg in die Softwareautomatisierung mit Ansible schafft langfristig neue Möglichkeiten. Sobald Playbooks etabliert sind, lassen sich damit nicht nur Anwendungen verwalten, sondern auch Server bereitstellen, Netzwerke konfigurieren und Sicherheitseinstellungen standardisieren. Diese Skalierbarkeit macht den Ansatz für Unternehmen aller Größen attraktiv – von kleinen IT-Teams bis hin zu globalen Umgebungen.
IT-Teams stehen vor der Herausforderung, Windows-Systeme zuverlässig und sicher mit Software zu bespielen. Klassische Lösungen wie SCCM oder Intune sind leistungsfähig, bringen aber hohe Lizenzkosten und administrative Komplexität mit sich. Besonders in kleinen und mittelständischen Unternehmen stellt sich daher die Frage: Geht es auch ohne große Investitionen? Die Antwort: Ja – mit Ansible und Chocolatey.
Ansible steuert dabei die gesamte Automatisierung über sogenannte Playbooks. Diese definieren exakt, welche Anwendungen auf welchen Geräten landen. Chocolatey wiederum agiert als Paketmanager und übernimmt die Installation, Aktualisierung und Entfernung von Software – zentral gesteuert über Ansible. Durch diesen kombinierten Ansatz entfällt der manuelle Installationsaufwand. Ein einziger Playbook-Lauf reicht, um hunderte Systeme konsistent mit Software zu versorgen. Das Ergebnis: mehr Kontrolle, weniger Fehler und eine sicherere IT-Umgebung.
Der Einstieg in die Softwareautomatisierung mit Ansible schafft langfristig neue Möglichkeiten. Sobald Playbooks etabliert sind, lassen sich damit nicht nur Anwendungen verwalten, sondern auch Server bereitstellen, Netzwerke konfigurieren und Sicherheitseinstellungen standardisieren. Diese Skalierbarkeit macht den Ansatz für Unternehmen aller Größen attraktiv – von kleinen IT-Teams bis hin zu globalen Umgebungen.
Pakete managen mit Chocolatey
Windows-Administratoren stehen vor der Wahl: Software manuell installieren, Microsofts winget verwenden, auf eine teure Enterprise-Plattform wie SCCM setzen – oder mit Chocolatey [1] eine flexible, kosteneffiziente Alternative nutzen. Während winget für einfache Installationen ausreicht – siehe dazu die Vergleichstabelle – fehlt ihm die zentrale Steuerung, die SCCM und andere Managementtools bieten. Chocolatey füllt diese Lücke und kombiniert die Automatisierung einer professionellen Plattform mit der Flexibilität eines Open-Source-Tools – vergleichbar mit apt oder yum auf Linux-Systemen. Statt Programme einzeln herunterzuladen und manuell zu installieren, reicht ein einziger Befehl:
choco install git firefox 7zip -y
Das spart Zeit und sorgt für Konsistenz. Updates laufen genauso einfach per:
choco upgrade all -y
Für einfache Standardinstallationen reicht winget. Wer jedoch eigene Software verwalten, automatische Deployments umsetzen oder komplexe Konfigurationsabläufe einbinden möchte, der fährt mit Chocolatey besser. Die Plattform gibt es in drei Editionen:
- Chocolatey Open Source (kostenlos): Ideal für kleine Unternehmen oder die private Nutzung. Unterstützt alle wesentlichen Funktionen, inklusive eigener Repository-Verwaltung.
- Chocolatey Pro (kostenpflichtig, nur für Einzelpersonen): Enthält zusätzliche Sicherheitsfeatures, ist aber nicht für Unternehmen lizenziert.
- Chocolatey for Business (C4B): Für größere Organisationen gedacht, mit zentralem Managementdashboard, Complianceberichten und Self-Service-Optionen.
Für diesen Workshop nutzen wir ausschließlich die Open-Source-Version, da sie bereits alle wichtigen Automatisierungsfunktionen abdeckt.
Der Ansible Control Node kommuniziert über WinRM mit den Zielsystemen.
Vergleich von Chocolatey und winget
Funktion
Chocolatey
winget
Verfügbare Paketanzahl
Rund 10.000 Pakete
Rund 3500 Pakete
Eigene Repositories
Unterstützt eigene Repositories
Kein zentrales Repository-Management
Installationslogik
Anpassbar per PowerShell-Skript
Statische Paketdefinitionen
Enterprise-Features
Chocolatey for Business mit zentralem Management
Keine dedizierte Unternehmensversion
Automatisierung mit Ansible
Die Infrastruktur von IT-Systemen konsequent über Code zu verwalten, bildet den Kernansatz von Infrastructure-as-Code. Ansible [2] erfüllt diesen Zweck mit klaren Konzepten wie Inventories, Playbooks und Modulen, die jede Konfiguration deklarativ erfassen.
Wer Windows-Hosts automatisiert steuern möchte, fokussiert sich dabei auf WinRM (Windows Remote Management), denn dieses Protokoll passt ideal in Enterprise-Umgebungen und eröffnet direkten Zugriff auf die gewünschten Systeme. Das Fundament von Ansible bilden derweil
- Inventories: Sie dienen als Verzeichnis aller Zielsysteme. Hier hinterlegen Administratoren IP-Adressen, Hostnamen und Gruppen, um Windows-Rechner präzise anzusprechen.
- Playbooks: Sie formulieren einzelne Automatisierungsschritte in YAML-Form. So definieren sie beispielsweise, welche Pakete installiert oder welche Dienste gestartet werden sollen.
- Module: Sie übernehmen in Ansible die konkrete Umsetzung. Für Windows stehen zahlreiche Module bereit, darunter "win_ping" zum Verbindungstest, "win_service" zur Steuerung von Diensten oder "win_chocolatey" für das Paketmanagement.
Noch ein Wort zu WinRM: Obwohl sich auch OpenSSH zur Anbindung von Windows eignet, nutzen Unternehmen häufig WinRM. Diese Remoting-Schnittstelle ist in Microsoft-Umgebungen fest verankert und reduziert damit zusätzliche Angriffsflächen. Gerade in sensiblen Bereichen bietet der native Microsoft-Dienst mehr Klarheit bei Firewall- und Sicherheitsregeln.
Ansible-Benutzer anlegen und Listener konfigurieren
Viele Automatisierungsaufgaben setzen administrative Rechte voraus. Daher empfiehlt es sich, einen dezidierten Ansible-Benutzer zu erstellen. Das PowerShell-Skript aus Listing 1 legt einen Benutzer namens "ANSIBLE" an und verleiht ihm Administratorrechte.
Listing 1: Ansible-Benutzer anlegen
$UserName = "ANSIBLE"
$Password = "SicheresPasswort123!"
$userParams = @{
Name = $UserName
Description = "Benutzerkonto für Ansible-Automatisierung"
Da WinRM in aktuellen Windows-Versionen wie erwähnt bereits vorhanden ist, reicht eine kurze Aktivierung aus, um Remotebefehle zuzulassen:
Enable-PSRemoting -Force
Ein Listener über HTTP (Port 5985) wird nun bereitgestellt. Für produktive Szenarien empfiehlt sich zusätzlich ein HTTPS-Listener (Port 5986).
Das Beispielskript aus Listing 2 erzeugt zunächst ein selbstsigniertes Zertifikat und hinterlegt es im WinRM-Listener. Passen Sie die Variablen entsprechend Ihrer Umgebung an, wie in den Code-Kommentaren mit dem "CHANGEME" hinterlegt.
Legen Sie auf dem Control Node (zum Beispiel einer Linux-VM oder WSL2-Instanz) einen Ordner für Ihr Projekt an und erstellen Sie eine passende Datei "hosts.ini". Unser Beispiel in Listing 3 trennt Server und Clients eindeutig. Zusätzlich unterscheiden Sie damit bei den Clients zwischen Admin-Arbeitsplätzen und regulären Benutzersystemen.
In Listing 3 repräsentiert "all-win" die Gesamtheit aller Windows-Systeme. Unterhalb dieser Gruppe finden sich:
- "win-servers" für dedizierte Windows-Server
- "win-clients" als Sammelgruppe der Arbeitsstationen
- "win-clients-admins" für Clientsysteme von Administratoren
- "win-clients-users" für die Systeme regulärer Benutzer
Listing 3: Ansible Control Node einrichten
# Gruppe für Windows-Server – hier werden alle dedizierten Windows-Server erfasst
[win-servers]
192.168.179.100
# Gruppe für Administratoren-Clients – Geräte, die für IT-Admins reserviert sind
[win-clients-admins]
192.168.179.110
192.168.179.111
# Gruppe für normale Benutzerclients – Standard-Arbeitsstationen ohne erhöhte Rechte
[win-clients-users]
192.168.179.120
192.168.179.121
# Zusammenfassung aller Windows-Clients – enthält sowohl Admin- als auch Benutzerclients
[win-clients:children]
win-clients-admins
win-clients-users
# Übergeordnete Gruppe für alle Windows-Systeme – fasst Server und Clients zusammen
[all-win:children]
win-servers
win-clients
# Globale Variablen für alle Windows-Hosts – hier werden die Verbindungsparameter definiert
[all-win:vars]
ansible_connection=winrm # Verbindung über Windows Remote Management (WinRM)
ansible_port=5986 # Nutzung des HTTPS-Ports für sichere WinRM-Kommunikation
ansible_winrm_server_cert_validation=ignore # Deaktiviert die Zertifikatsprüfung (nicht für Produktion empfohlen)
ansible_winrm_transport=ntlm # Authentifizierung über NTLM (alternative Optionen: Kerberos, Basic, CredSSP)
ansible_user=.\ANSIBLE # Ansible-Benutzer, der für die Automatisierung genutzt wird
ansible_password=SicheresPasswort123! # Passwort für den Ansible-Benutzer (sollte in einer Vault-Datei gespeichert werden)
Auf diese Weise steuern Sie gezielt, welche Hosts bestimmte Playbooks erhalten. Die aufgeführten IP-Adressen oder Hostnamen (zum Beispiel 192.168.179.100) passen Sie nach eigenem Bedarf an.
Auch die Beispiele für den Ansible-Nutzer und das Passwort lassen sich frei ändern.
Tipp: Wer verschiedene Standorte oder Fachbereiche verwaltet, kann weitere Untergruppen definieren oder eine dynamische Inventarisierung nutzen. So lassen sich etwa AD-Gruppen, CMDB-Einträge oder andere Datenquellen abfragen, um die Datei "hosts.ini" automatisch zu generieren.
Ansible unterstützt Plug-ins, die Inventories zur Laufzeit erstellen und flexibel an Ihr Umfeld anpassen.Überprüfen Sie die Verbindung nun noch mit dem Modul "win_ping":
ansible win-servers -i hosts.ini -m win_ping
Erscheint eine SUCCESS-Meldung, steht die Grundkonfiguration. Andernfalls kontrollieren Sie folgende Punkte:
Für eine reibungslose Softwareverteilung in Windows-Umgebungen bietet Ansible bereits ein passendes Modul: "win_chocolatey" [3]. Dieses Modul gehört zur offiziellen Chocolatey Ansible Collection "chocolatey.chocolatey" und nimmt Ihnen fast alle Einzelschritte ab. Es prüft bei Bedarf, ob auf dem Zielsystem Chocolatey selbst installiert ist, richtet es notfalls ein und kümmert sich anschließend um die gewünschten Pakete. Neben "win_chocolatey" stehen weitere Module wie "win_ chocolatey_source" (Zusätzliche Repository-Quellen verwalten), "win_chocolatey_feature" (Features wie Proxy-Einstellungen oder Hintergrunddienste ein- und ausschalten), "win_ chocolatey_config" (Konfiguration definieren) und "win_chocolatey_facts" (Installationsstatus abfragen) zur Verfügung. Dank dieser Bandbreite legen Sie fest, welche Chocolatey-Funktionen aktiv sind oder welche Quellen für die Softwarebeschaffung in Frage kommen.
Installation, Updates und Versionsverwaltung
Nach der Gruppeneinteilung kümmern Sie sich um die Pakete, die auf bestimmten Hosts landen sollen. Das Playbook aus Listing 4 zeigt eine mögliche Struktur, um Entwicklungswerkzeuge auf Windows-Servern bereitzustellen. Ersetzen Sie "windows_server" durch den gewünschten Gruppennamen in Ihrem Inventory. Möchten Sie andere Pakete installieren, tauschen Sie einfach die entsprechenden Paketnamen aus.
Listing 4: Beispiel Playbook zur Softwareverteilung
# Filename: install_dev_tools.yml
- name: Installiere Entwicklungswerkzeuge auf Windows-Server
hosts: win-servers
tasks:
- name: Stelle sicher, dass Chocolatey installiert ist
win_chocolatey:
name: chocolatey
state: present
- name: Installiere 7zip und Git via Chocolatey
win_chocolatey:
name: "{{ item }}"
state: present
loop:
- 7zip
- git
Diese wenigen Zeilen reichen aus, um sicherzustellen, dass Chocolatey auf allen Servern der Gruppe "win-servers" aktiv ist und die gewünschten Anwendungen installiert. Dazu gilt es lediglich, den folgenden Befehl auszuführen:
Für regelmäßige Aktualisierungen kombinieren Sie das gleiche Modul mit "state: latest". Ein einfaches Beispiel zeigt Listing 5. Ansible bringt so sämtliche bereits installierten Pakete auf den aktuellen Stand. Das spart Zeit, weil Sie nicht jede Anwendung einzeln updaten müssen.
Listing 5: Software aktualisieren
- name: Update vorhandener Pakete
hosts: win-servers
tasks:
- name: Aktualisiere installierte Software
win_chocolatey:
name: all
state: latest
Nicht jede Software bleibt dauerhaft auf einem System. Falls ein Programm entfernt werden soll, setzen Sie den Parameter "state" auf "absent". Möchten Sie stattdessen eine bestimmte Version erzwingen, nutzen Sie "version". So stellen Sie wie in Listing 6 sicher, dass alle Systeme dieselbe Softwareversion verwenden oder gezielt eine ältere Variante beibehalten.
Listing 6: Versionsverwaltung
- name: Verwalte Softwareversionen auf Windows-Hosts
hosts: windows_server
tasks:
- name: Stelle sicher, dass Notepad++ in Version 8.5 installiert ist
win_chocolatey:
name: notepadplusplus
version: "8.5"
state: present
- name: Deinstalliere VLC Media Player
win_chocolatey:
name: vlc
state: absent
Tipps für die Softwareverteilung
Wer dauerhaft eine automatisierte Softwareverteilung betreibt, sollte auf einige Prinzipien achten. Sicherheit etwa spielt eine zentrale Rolle. Wir empfehlen Ansible Vault, um Passwörter oder sensible Variablen verschlüsselt zu hinterlegen und Zertifikate für WinRM-HTTPS sauber zu verwalten. Für eine robuste Struktur eignen sich Ansible-Rollen, in denen sich wiederkehrende Tasks wie die Grundinstallation von Chocolatey ablegen lassen. Rollen sorgen für Ordnung im Code und ermöglichen eine einfache Wiederverwendung bei unterschiedlichen Projekten oder Hostgruppen.
Auch das Teamwork profitiert von passenden Managementtools. Mit AWX oder Ansible Automation Platform (AAP) planen Sie Deployments zentral und erhalten eine grafische Oberfläche, um Inventories und Playbooks übersichtlich zu verwalten. Wer eine schlankere Lösung vorzieht, greift zu Semaphore, das ähnliche Funktionen bietet. Eine klar gegliederte Projektstruktur in Ansible (beispielsweise getrennte Playbooks für Updates, Deinstallationen, Hardening) erspart unnötige Komplexität und erleichtert Fehlersuche und Wartung.
Als Faustregel für den produktiven Einsatz haben wir hier eine kurze Checkliste zusammengestellt:
1. Legen Sie einen dedizierten Benutzer mit sicheren Anmeldedaten an.
2. Trennen Sie Server und Clients sauber in Gruppen, idealerweise in Zusammenhang mit der dynamischen Generierung der Inventory-Datei über externe Systeme, wie einer zentralen CMDB, freie Tools wie NetBox oder das Active Directory.
3. Setzen Sie Ansible-Rollen ein, um Installationen, Updates oder Wartungsaufgaben modular aufzubauen.
4. Testen Sie alle Schritte zunächst in einer Pilotumgebung.
5. Beobachten Sie regelmäßig Protokolle und Statusmeldungen, um Probleme früh zu erkennen.
Nutzung weiterer Ansible-Module
Wenn Sie bereits Ansible für die automatisierte Softwareverteilung via Chocolatey einsetzen, ist das oft nur der erste Schritt in Richtung vollständiges Konfigurationsmanagement unter Windows. Denn sobald die grundlegende Ansible-Infrastruktur steht, ergeben sich viele Synergieeffekte: Playbooks, Inventories und Rollen lassen sich weit über das reine Paketmanagement hinaus nutzen, um Windows-Hosts zentral zu konfigurieren und zu verwalten.
Gerade in Umgebungen, in denen zunächst nur ein praktischer Anwendungsfall (beispielsweise das Verteilen von neuen Anwendungen oder Updates) im Vordergrund steht, kann Ansible nach und nach an Bedeutung gewinnen. Spätestens wenn Administratoren feststellen, wie viel Zeit sich dank automatisierter Prozesse einsparen lässt, liegt es nahe, auch weitere Aufgaben darüber abzuwickeln. Zwei wichtige Bereiche, in denen sich Ansible bewährt, sind das Managen von Windows-Diensten (zum Beispiel Start, Stopp, Deaktivieren) und das Installieren von Windows-Features (etwa .NET Framework, IIS).
Windows-Dienste und -Features managen
Neben der Registry (in der zentrale Konfigurationsparameter hinterlegt werden) sind Dienste und Features essenzielle Bausteine eines Windows-Systems. Ansible bringt hierfür zwei Kernmodule mit:
- win_service: Verwaltet Status und Eigenschaften von Windows-Diensten. Damit lassen sich Dienste starten, stoppen, deaktivieren oder auch dauerhaft aktivieren.
- win_feature: Installiert oder entfernt Windows-Features wie das .NET Framework oder den Internet Information Services (IIS).
Damit lassen sich zahlreiche Szenarien elegant umsetzen – von sicherheitsrelevanten Einstellungen bis hin zur automatisierten Bereitstellung kompletter Webserver-Rollen. Das Playbook in Listing 7 deaktiviert den Druckerspooler auf allen Windows-Servern, die in der Gruppe "win-servers" hinterlegt sind. Damit reduzieren Sie potenzielle Angriffsvektoren, wenn das Drucken auf Servern ohnehin nicht benötigt wird.
Listing 7: Windows-Dienste verwalten
- name: Verwalte Windows-Dienste
hosts: win-servers
tasks:
- name: Stelle sicher, dass der Print Spooler Dienst gestoppt und deaktiviert ist
ansible.windows.win_service:
name: "Spooler"
start_mode: "disabled"
state: "stopped"
Im Playbook aus Listing 8 werden die .NET-Framework-Features auf sämtlichen Mitgliedern der Gruppe "win-servers" aufgespielt. In manchen Fällen verlangt Windows nach einem Neustart. Ansible erkennt dies und zeigt entsprechende Meldungen an. Mithilfe von "register: dotnet_install" speichern Sie Ausgaben und Statusinfos, die Sie in nachfolgenden Tasks (zum Beispiel Logging oder Versionsprüfung) weiterverwenden können.
Listing 8: Windows-Features installieren
- name: Installiere Windows-Features auf Servern
hosts: win-servers
tasks:
- name: Stelle sicher, dass das .NET-Framework 4.8 installiert ist
ansible.windows.win_feature:
name: "NET-Framework-Features"
state: present
register: dotnet_install
Haben Sie Ansible also bereits für die Softwareverteilung im Einsatz, lohnt sich ein Blick auf die zusätzlichen Möglichkeiten. Durch den Einbezug von Diensten und Features in Ihre Ansible-Playbooks stellen Sie sicher, dass sich sämtliche Aspekte der Systemkonfiguration zentral, konsistent und transparent verwalten lassen – ganz im Sinne eines modernen Infrastructure-as-Code-Ansatzes.
Fazit
Ansible und Chocolatey harmonieren hervorragend für eine effiziente und flexible Softwareverteilung in Windows-Umgebungen. Ohne die Kosten und Komplexität von Enterprise-Produkten versorgen Sie Clients und Server automatisiert, sicher und zuverlässig. Durch gruppierte Inventories und zentrale Playbooks behalten Sie jederzeit die Kontrolle über Softwarestände und Systemkonfigurationen. Wer darüber hinausgeht, kann mit Ansible auch Infrastruktur, Netzwerke und Sicherheitsrichtlinien standardisieren – und Windows-Umgebungen ebenso konsistent verwalten wie Linux- oder Cloudsysteme.