Listing 1: Ansible-Benutzer anlegen $UserName = "ANSIBLE" $Password = "SicheresPasswort123!" $userParams = @{ Name = $UserName Description = "Benutzerkonto für Ansible-Automatisierung" Password = (ConvertTo-SecureString -AsPlainText $Password -Force) AccountNeverExpires = $true PasswordNeverExpires = $true UserMayNotChangePassword = $true } $AnsibleUser = New-LocalUser @userParams $AnsibleUser | Add-LocalGroupMember -Group "Administrators" Listing 2: Listener anlegen # CHANGEME: FQDN setzen $Fqdn = "WIN_SERVER_FQDN" $certParams = @{ "CertStoreLocation" = "cert:\localmachine\my" "DnsName" = $Fqdn "NotAfter" = (Get-Date).AddMonths(36) } # Zertifikat erstellen und Thumbprint ermitteln $Thumbprint = (New-SelfSignedCertificate @certParams).Thumbprint $Thumbprint # HTTPS-Listener anlegen # CHANGEME: Hier den Hostname anpassen winrm create winrm/config/Listener?Address=*+Transport= HTTPS '@{Hostname="WIN_SERVER_FQDN"; CertificateThumbprint="HIER_CERT_THUMBPRINT_ EINFÜGEN"}' # Firewall-Regel freischalten $params = @{ DisplayName = "WinRM HTTPS" Direction = "Inbound" Action = "Allow" Protocol = "TCP" LocalPort = 5986 } New-NetFirewallRule @params # Testen, ob WinRM-Listener erreichbar ist test-wsman $Fqdn 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) 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 Listing 5: Software aktualisieren - name: Update vorhandener Pakete hosts: win-servers tasks: - name: Aktualisiere installierte Software win_chocolatey: name: all state: latest 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 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" 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