← Zur Übersicht
AP2-03 · AP2 — Teil 2

Automatisierung & Skripting

Warum automatisieren?

In der Prüfung wird oft nach dem Sinn von Automatisierung gefragt — die Antwort solltest du in eigenen Worten begründen können, nicht nur auswendig lernen.

  • Reproduzierbarkeit: Ein Skript führt eine Aufgabe (z. B. Benutzeranlage, Softwareverteilung) jedes Mal identisch aus. Manuelle Klickarbeit ist dagegen fehleranfällig und von der Tagesform des Admins abhängig.
  • Zeitersparnis: Wiederkehrende Aufgaben (z. B. 50 neue Azubi-Accounts zum Ausbildungsstart) lassen sich in Sekunden statt Stunden erledigen.
  • Fehlerreduktion: Tippfehler, vergessene Arbeitsschritte oder falsche Reihenfolge fallen weg, sobald der Ablauf einmal korrekt kodiert ist.
  • Dokumentation „as code“: Ein Skript ist gleichzeitig eine lesbare, nachvollziehbare Beschreibung, wie ein Vorgang abläuft — es ersetzt oder ergänzt eine Word-Anleitung und bleibt automatisch aktuell, solange das Skript gepflegt wird.
  • Skalierbarkeit: Ob 1 oder 500 Systeme betroffen sind, macht für ein Skript kaum einen Unterschied — für einen Menschen schon.
Prüfungstipp

Wird nach Vorteilen von Automatisierung gefragt, nenne konkret mindestens zwei der Begriffe Reproduzierbarkeit, Zeitersparnis, Fehlerreduktion und Dokumentation — Prüfer erwarten oft genau diese Stichworte in eigenen Sätzen, nicht nur „spart Zeit“.

PowerShell-Grundlagen

PowerShell ist die Skriptsprache für Windows-Administration und Bestandteil jeder Windows-Server-Installation. Der zentrale Unterschied zu klassischen Shells: PowerShell reicht in der Pipeline keine reinen Textzeilen weiter, sondern Objekte mit Eigenschaften (Properties) und Methoden. Dadurch kann die nächste Cmdlet gezielt auf einzelne Eigenschaften zugreifen, statt Text mühsam parsen zu müssen.

Verb-Noun-Syntax

Jedes PowerShell-Cmdlet folgt dem Schema Verb-Substantiv. Das Verb beschreibt die Aktion, das Substantiv das Objekt:

  • Get-Service — Dienste auslesen
  • Get-ADUser — Active-Directory-Benutzer abfragen
  • New-Item — neues Element (Datei, Ordner, Registry-Key) anlegen
  • Set-..., Remove-..., Stop-..., Start-... als weitere Standardverben

Diese Einheitlichkeit macht Cmdlets vorhersehbar: Wer Get-Process kennt, errät auch Stop-Process richtig.

Pipeline-Beispiel

Da Objekte weitergereicht werden, kannst du gezielt filtern und Eigenschaften auswählen:

Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name

Hier wird das Objekt $_ (aktuelles Pipeline-Element) direkt auf seine Eigenschaft Status geprüft — ganz ohne Textsuche.

Variablen und Kontrollstrukturen

Variablen beginnen immer mit einem Dollarzeichen, z. B. $name = "Azubi01". Kontrollstrukturen wie if und foreach ähneln anderen Programmiersprachen. Beispielskript, das gestoppte Dienste ausgibt:

foreach ($dienst in Get-Service) { if ($dienst.Status -eq "Stopped") { Write-Host $dienst.Name } }

Bash-Grundlagen

Bash ist die Standard-Shell auf den meisten Linux-Servern und wird für Skripte mit der Endung .sh verwendet. Anders als PowerShell arbeitet Bash rein textbasiert — die Ausgabe eines Befehls ist immer Text, der bei Bedarf mit Werkzeugen wie grep (Zeilen nach Muster filtern) oder awk (Spalten aus Text extrahieren) weiterverarbeitet wird.

Variablen, Bedingungen, Schleifen

Variablen werden ohne Dollarzeichen zugewiesen, aber mit Dollarzeichen gelesen: name="server1" und danach echo $name. Eine Bedingung sieht so aus:

if [ -f /etc/passwd ]; then echo "Datei vorhanden"; fi

Schleifen gibt es als Zählschleife und als Bedingungsschleife:

for i in 1 2 3; do echo "Durchlauf $i"; done

while ping -c1 server1 >/dev/null; do sleep 5; done

Beispielskript

Ein kleines Skript, das prüft, ob ein Dienst läuft, und andernfalls neu startet:

if ! systemctl is-active --quiet sshd; then systemctl restart sshd; fi

In größeren Skripten filtert man Logdateien häufig so: grep "ERROR" /var/log/syslog | awk '{print $1, $2}'grep sucht die Fehlerzeilen, awk schneidet daraus z. B. Datum und Uhrzeit heraus.

Konfigurationsmanagement: der Grundgedanke

Einzelne Skripte stoßen an Grenzen, sobald viele Systeme dauerhaft in einem definierten Zustand gehalten werden sollen. Genau hier setzen Konfigurationsmanagement-Werkzeuge wie Ansible an: Statt Schritt für Schritt zu beschreiben, wie etwas getan wird (imperativ), beschreibt man deklarativ den gewünschten Soll-Zustand — zum Beispiel „Paket X ist installiert“ oder „Dienst Y ist aktiviert“. Das Tool vergleicht diesen Soll-Zustand mit dem tatsächlichen Ist-Zustand auf jedem Zielsystem und passt nur das an, was abweicht. Das reduziert Aufwand und Fehlerquote erheblich, wenn Dutzende oder Hunderte Server einheitlich konfiguriert werden müssen.

Automatisierung sicher betreiben

Ein Automatisierungsskript, das produktive Systeme verändert, kann im Fehlerfall in Sekunden genauso viel Schaden anrichten wie es sonst an Zeit spart — es läuft ohne den „gesunden Menschenverstand“ eines Admins mit, der bei einem unerwarteten Zustand innehalten würde. Deshalb braucht produktionsnahes Skripting zusätzliche Absicherungen über die reine Funktionslogik hinaus.

Validierung von Eingaben

Ein sauber geschriebenes Skript prüft Parameter und den aktuellen Systemzustand, bevor es Änderungen vornimmt — es führt nicht blind aus, was übergeben wurde. Beispiel: Vor dem Löschen eines Benutzerkontos prüft das Skript, ob der übergebene Kontoname überhaupt existiert und nicht versehentlich leer oder ein Platzhalter ist.

Dry-Run / Testlauf

Ein Dry-Run simuliert die geplante Änderung, ohne sie tatsächlich auszuführen, und zeigt vorab an, was passieren würde. In PowerShell steht dafür bei vielen Cmdlets der Parameter -WhatIf zur Verfügung, z. B. Remove-ADUser -Identity "azubi01" -WhatIf — das Cmdlet gibt aus, welches Konto gelöscht würde, löscht aber nichts.

Protokollierung / Logging

Jede automatisierte Aktion sollte nachvollziehbar dokumentiert werden: was wurde getan, wann, und mit welchem Ergebnis. Ohne Logging lässt sich im Nachhinein weder ein Fehler analysieren noch nachweisen, welche Änderung ein Skript tatsächlich vorgenommen hat.

Rollback-Strategie

Für den Fehlerfall braucht ein Automatisierungsskript einen Weg zurück: Bevor ein Zustand verändert wird, sollte der vorherige Zustand gesichert werden (z. B. eine Konfigurationsdatei kopieren oder ein Backup anlegen), damit sich die Änderung bei Bedarf rückgängig machen lässt.

Schrittweises Ausrollen

Statt eine Änderung sofort auf alle Systeme gleichzeitig zu verteilen, testet man zuerst auf einzelnen Testsystemen oder wenigen Servern und rollt erst danach schrittweise auf die restliche Umgebung aus. So bleibt der Schaden im Fehlerfall begrenzt.

Prüfungstipp

Wird nach Absicherungsmaßnahmen für Automatisierungsskripte in produktiven Umgebungen gefragt, nenne die Stichworte Validierung, Dry-Run, Logging und Rollback — das sind die Begriffe, die in der AP2 typischerweise erwartet werden.

Aufgabenplanung: Cron und Task Scheduler

Skripte entfalten ihren vollen Nutzen erst, wenn sie automatisch zur richtigen Zeit laufen — ohne dass ein Mensch sie manuell startet.

  • Cron (Linux): Der Cron-Daemon liest Einträge aus der Crontab und führt Befehle zu festgelegten Zeitpunkten aus. Ein Eintrag wie 0 2 * * * /skripte/backup.sh startet das Backup-Skript täglich um 2:00 Uhr. Die fünf Felder stehen für Minute, Stunde, Tag, Monat, Wochentag.
  • Aufgabenplanung (Windows Task Scheduler): Das grafische bzw. per schtasks steuerbare Pendant unter Windows. Auch hier lassen sich Trigger (Zeitpunkt, Systemstart, Ereignis) mit einer auszuführenden Aktion (z. B. einem PowerShell-Skript) verknüpfen.

Beide Mechanismen sind das Bindeglied zwischen einem fertigen Skript und echter Automatisierung: Ohne Scheduling müsste weiterhin jemand manuell an den Start erinnern.

Prüfungstipp

Merke dir die Cron-Feldreihenfolge Minute – Stunde – Tag – Monat – Wochentag und dass Cron zu Linux, der Task Scheduler zu Windows gehört — Verwechslungsfragen in der AP2 lassen sich damit sicher beantworten.