PowerShell Scripts sind ein mächtiges Werkzeug zur Automatisierung wiederkehrender Aufgaben. Doch was, wenn diese Scripts nicht sofort, sondern zu bestimmten Zeiten oder in regelmäßigen Abständen ausgeführt werden sollen? In diesem Artikel zeige ich dir, wie du PowerShell Scripts auf Windows und Linux zeitversetzt ausführen kannst.
Was bedeutet “zeitversetzt ausführen”?
Zeitversetzte Ausführung bedeutet, dass ein Script nicht manuell gestartet wird, sondern automatisch zu einem vordefinierten Zeitpunkt oder in regelmäßigen Intervallen läuft. Das ist besonders nützlich für:
- Backup-Scripts, die nachts laufen sollen
- Berichte, die täglich generiert werden
- Systemwartung in wartungsarmen Zeiten
- Datenbereinigung in regelmäßigen Abständen
PowerShell Scripts unter Windows zeitversetzt ausführen
Methode 1: Windows Aufgabenplanung (Task Scheduler)
Die einfachste Methode unter Windows ist die Verwendung der integrierten Aufgabenplanung.
Über die grafische Oberfläche:
- Aufgabenplanung öffnen: Drücke
Windows + R
, gibtaskschd.msc
ein und drücke Enter - Neue Aufgabe erstellen: Klicke rechts auf “Einfache Aufgabe erstellen”
- Namen vergeben: Gib deiner Aufgabe einen aussagekräftigen Namen
- Trigger festlegen: Wähle aus, wann die Aufgabe ausgeführt werden soll (täglich, wöchentlich, etc.)
- Aktion definieren: Wähle “Programm starten” und gib folgendes ein:
- Programm:
powershell.exe
- Argumente:
-ExecutionPolicy Bypass -File "C:\Pfad\zu\deinem\script.ps1"
- Programm:
Über PowerShell (für Fortgeschrittene):
# Neue geplante Aufgabe erstellen
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File C:\Scripts\MeinScript.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "MeinPowerShellScript" -Action $action -Trigger $trigger -Settings $settings
PowerShell Scripts unter Linux zeitversetzt ausführen
Methode 1: Cron (der Standard-Weg)
Unter Linux ist cron
das Standard-Tool für zeitgesteuerte Aufgaben.
Crontab bearbeiten:
# Crontab für den aktuellen Benutzer öffnen
crontab -e
Cron-Syntax verstehen:
# Minute Stunde Tag Monat Wochentag Befehl
# * * * * * *
# | | | | | |
# | | | | | +-- Befehl
# | | | | +------------ Wochentag (0-7, Sonntag = 0 oder 7)
# | | | +------------------ Monat (1-12)
# | | +---------------------- Tag (1-31)
# | +----------------------------- Stunde (0-23)
# +------------------------------------ Minute (0-59)
Beispiele für Cron-Einträge:
# Täglich um 2:00 Uhr
0 2 * * * /usr/bin/pwsh /home/user/scripts/backup.ps1
# Jeden Montag um 9:30 Uhr
30 9 * * 1 /usr/bin/pwsh /home/user/scripts/weekly-report.ps1
# Alle 15 Minuten
*/15 * * * * /usr/bin/pwsh /home/user/scripts/monitor.ps1
# Am ersten Tag jedes Monats um Mitternacht
0 0 1 * * /usr/bin/pwsh /home/user/scripts/monthly-cleanup.ps1
Cross-Platform: Start-Sleep für einfache Verzögerungen
Das Start-Sleep
Cmdlet ist die einfachste Methode, um eine Pause in dein PowerShell Script einzubauen. Es pausiert die Ausführung für eine bestimmte Zeit:
# 5 Sekunden warten
Start-Sleep -Seconds 5
# 2 Minuten warten
Start-Sleep -Seconds 120
# Oder mit Millisekunden für präziseres Timing
Start-Sleep -Milliseconds 1500 # 1,5 Sekunden
# Praktisches Beispiel: Script mit Verzögerung zwischen Aktionen
Write-Host "Starte Backup..."
Start-Backup
Start-Sleep -Seconds 30 # 30 Sekunden warten
Write-Host "Prüfe Backup-Status..."
Test-BackupStatus
Wichtig: Start-Sleep
blockiert den aktuellen PowerShell-Prozess komplett. Für längere Wartezeiten oder parallele Ausführung solltest du PowerShell Jobs verwenden.
Wichtige Tipps für beide Systeme
1. Ausführungsberechtigungen beachten
Windows: Stelle sicher, dass die Execution Policy korrekt gesetzt ist:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Linux: PowerShell-Scripts benötigen Ausführungsrechte:
chmod +x /home/user/scripts/meinscript.ps1
2. Absolute Pfade verwenden
Verwende immer absolute Pfade zu deinen Scripts und Dateien, da zeitgesteuerte Tasks oft in einem anderen Arbeitsverzeichnis starten.
3. Logging implementieren
Füge Logging zu deinen Scripts hinzu, um Probleme zu identifizieren:
# Einfaches Logging
$logFile = "C:\Logs\meinscript.log"
"$(Get-Date): Script gestartet" | Out-File -Append -FilePath $logFile
try {
# Dein Script-Code hier
"$(Get-Date): Script erfolgreich beendet" | Out-File -Append -FilePath $logFile
}
catch {
"$(Get-Date): Fehler - $($_.Exception.Message)" | Out-File -Append -FilePath $logFile
}
4. Umgebungsvariablen beachten
Zeitgesteuerte Scripts laufen oft mit minimalen Umgebungsvariablen. Setze wichtige Variablen explizit:
$env:PATH += ";C:\Programme\MeinTool"
Fazit
Die zeitversetzte Ausführung von PowerShell Scripts ist sowohl unter Windows als auch unter Linux problemlos möglich. Windows bietet mit der Aufgabenplanung eine benutzerfreundliche grafische Lösung, während Linux mit Cron und Systemd Timer flexiblere, aber textbasierte Optionen bereitstellt.
Die Wahl der Methode hängt von deinen spezifischen Anforderungen ab:
- Für einfache, regelmäßige Aufgaben: Windows Task Scheduler oder Linux Cron
- Für kurze Verzögerungen: PowerShell Start-Sleep
Wichtig ist in jedem Fall, dass du deine Scripts ausreichend testest und mit Logging versehen, um Probleme schnell identifizieren zu können. So stellst du sicher, dass deine Automatisierung zuverlässig funktioniert und dir langfristig Zeit spart.