- 2 Abschnitte
- 16 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Grundlagen & Einstieg9
- Fortgeschritten8
Skriptautomatisierung und Zeitplanung
Bis hierher hast du gelernt, wie man Skripte schreibt, Funktionen baut und Module organisiert.
Jetzt geht’s darum, das Ganze automatisch ablaufen zu lassen – ob täglich ein Backup, wöchentliche Reports oder stündliche Serverprüfungen.
Automatisierung spart nicht nur Zeit, sie stellt auch sicher, dass Abläufe immer gleich, fehlerfrei und planbar ausgeführt werden.
Überblick: Wege zur Automatisierung
| Methode | Beschreibung | Wann sinnvoll |
|---|---|---|
| Aufgabenplanung (Task Scheduler) | Standardmäßig in Windows integriert | Regelmäßige Jobs (z. B. tägliche Backups, Reports) |
| PowerShell Jobs | Aufgaben im Hintergrund ausführen, während du weiterarbeitest | Asynchrone Skripte oder parallele Prozesse |
| Geplante PowerShell-Workflows | Mehrstufige Abläufe, die auch nach Neustarts fortgesetzt werden können | Längere, komplexe Serverprozesse |
| Remoting + Skriptjobs | Skripte automatisch auf mehreren Geräten ausführen | Netzweite Administration |
| Event-basierte Automatisierung (Register-ObjectEvent) | Skripte reagieren auf Ereignisse (z. B. Datei erstellt, Service stoppt) | Reaktive Systeme oder Monitoring |
PowerShell-Skripte mit Aufgabenplanung starten
Die einfachste und robusteste Methode: über den Windows-Aufgabenplaner (Task Scheduler).
Öffne den Aufgabenplaner (
taskschd.msc).Wähle Aufgabe erstellen.
Unter Allgemein gibst du Namen und Beschreibung an (z. B. „Backup täglich 21 Uhr“).
Unter Trigger → Neu → Zeitplan wählen (täglich, wöchentlich, beim Start usw.).
Unter Aktionen → Neu → als Programm angeben:
Programm:
powershell.exe
Argumente:
-ExecutionPolicy Bypass -File "C:\Skripte\backup.ps1"
6. Optional: „Mit höchsten Privilegien ausführen“, wenn Adminrechte nötig sind.
7. Fertigstellen.
Damit läuft dein Skript automatisch zur angegebenen Zeit – auch wenn du nicht eingeloggt bist (sofern Benutzer und Passwort hinterlegt sind).
Beispiel: Automatisiertes Backup-Skript
# backup.ps1
$quelle = "C:\Projekte"
$ziel = "D:\Backups\" + (Get-Date -Format "yyyy-MM-dd")
New-Item -ItemType Directory -Path $ziel -Force | Out-Null
Copy-Item -Path "$quelle\*" -Destination $ziel -Recurse -Force
Add-Content -Path "C:\Backups\backup.log" -Value "Backup abgeschlossen am $(Get-Date)"
In der Aufgabenplanung kannst du jetzt z. B. festlegen:
Täglich um 21:00 Uhr, Benutzer „SYSTEM“, und schon läuft es jeden Abend automatisch.
PowerShell-Jobs (im Hintergrund ausführen)
Mit einem Job kannst du Befehle oder Skripte starten, während du weiterarbeitest.
Das ist hilfreich, wenn du lange laufende Prozesse hast (z. B. große Dateioperationen, Netzwerk-Scans, API-Abfragen).
Start-Job -Name "Scan" -ScriptBlock {
Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue
}
Job-Status prüfen:
Get-Job
Ergebnis abrufen:
Receive-Job -Name "Scan"
Job löschen:
Remove-Job -Name "Scan"
So kannst du mehrere Aufgaben parallel laufen lassen, ohne mehrere PowerShell-Fenster zu öffnen.
Wiederkehrende Jobs (Scheduled Jobs)
Du kannst Aufgaben auch direkt aus PowerShell heraus planen – ohne den Aufgabenplaner manuell zu öffnen.
Beispiel:
$trigger = New-JobTrigger -Daily -At "21:00"
Register-ScheduledJob -Name "Backup" -Trigger $trigger -ScriptBlock {
Copy-Item "C:\Projekte" "D:\Backups" -Recurse -Force
Add-Content "C:\Backups\backup.log" "Backup um $(Get-Date) ausgeführt."
}
Du kannst sie verwalten wie in einer Mini-Datenbank:
Get-ScheduledJob
Unregister-ScheduledJob -Name "Backup"
Der Vorteil: Du brauchst keine GUI, alles lässt sich skripten.
Get-ScheduledJob
Unregister-ScheduledJob -Name "Backup"
Ereignisgesteuerte Skripte
Mit Register-ObjectEvent kannst du Skripte reaktiv machen – also sie starten, wenn etwas passiert.
Beispiel: automatisch reagieren, wenn jemand eine Datei in einen bestimmten Ordner legt.
$ordner = "C:\Uploads"
$watcher = New-Object IO.FileSystemWatcher $ordner, "*.*"
Register-ObjectEvent $watcher Created -Action {
$datei = $Event.SourceEventArgs.FullPath
Add-Content "C:\Uploads\log.txt" "Neue Datei entdeckt: $datei am $(Get-Date)"
}
Solche Skripte eignen sich z. B. für Monitoring, Datenverarbeitung oder automatische Benachrichtigungen.
Automatisierung über Remoting
Wenn du PowerShell-Remoting aktiviert hast (siehe vorige Lektion), kannst du automatisierte Skripte zentral auf mehreren Hosts ausführen:
$server = @('SRV-01','SRV-02')
Invoke-Command -ComputerName $server -ScriptBlock {
Restart-Service spooler
Add-Content "C:\service_restart.log" "Spooler neu gestartet um $(Get-Date)"
}
Damit kannst du geplante Aktionen im Netzwerk verteilen, z. B. wöchentliche Neustarts oder Konfigurationsupdates.
Kontrolle und Reporting
Wenn du viele automatische Jobs hast, brauchst du Überblick:
Schreibe Logs (siehe Lektion 2)
Nutze
Out-File,Export-Csvoder eigene LogfunktionenLass dir regelmäßig Berichte generieren und per E-Mail senden
Beispiel:
$bericht = Get-EventLog -LogName Application -Newest 50
$bericht | Export-Csv "C:\Logs\Events.csv" -NoTypeInformation
Send-MailMessage -To "admin@firma.de" -From "server@firma.de" -Subject "Täglicher Eventlog-Bericht" `
-Body "Bericht im Anhang." -Attachments "C:\Logs\Events.csv" -SmtpServer "mail.firma.de"
Sicheres Ausführen von automatisierten Skripten
Execution Policy: Verwende
RemoteSignedoderBypassin geplanten Tasks, damit Skripte ohne Interaktion laufen.Pfadangaben: Verwende absolute Pfade (
C:\...statt.\...) – Tasks starten meist nicht im gewohnten Verzeichnis.Logs schreiben: Immer am Anfang eines automatisierten Skripts prüfen, ob das Log-Verzeichnis existiert.
Vertrauliche Daten: Niemals Passwörter im Klartext speichern. Lieber mit
Get-CredentialundExport-Clixmlverschlüsselt sichern.
Beispiel:
Get-Credential | Export-Clixml "$HOME\backup_creds.xml"
$creds = Import-Clixml "$HOME\backup_creds.xml"
Diese Anmeldeinformationen funktionieren nur auf demselben Computer und Benutzerkontext.
