Powershell-Aufruf aus Task-Scheduler wird nicht ausgeführt
Werte Kollegen und PowerShell-Spezialisten,
ich stehe vor einem Problem, welches mir schon einiges an Zeit und viel Nerven gekostet hat, obwohl es eigentlich simpel ist.
Aufgabenstellung:
Ein HyperV-VM-Snapshot soll automatisiert, täglich wiederhergestellt werden.
Ich habe dazu eine PS-Script-Datei .ps1 mit folgendem Inhalt erstellt:
Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob
Der Task-Job enthält (- wurde schon mit dem lokalen, als auch mit einem Domain - Admin ausgeführt, ohne Ergebnisänderungen):
Action: Start a program
Program/Script: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
Add arguments: -file "C:\Hyper-V\RestoreW2K8DEMO_Base_Snapshot.ps1"
Problembeschreibung:
Führt man obigen Command "Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob" oder auch den Scriptaufruf direkt in der PS-Console aus, funktioniert es wunderbar.
Wird es über den Task-Scheduler ausgeführt, behauptet dieser dass der Task ausgeführt wurde, es passiert aber genau nichts. Kein Ereigniseintrag oder Sonstiges.
Auch die UAC wurde schon versuchsweise deaktiviert, doch ohne Erfolg.
Ich hoffe, jemand von euch kann mir weiterhelfen...
Danke schon mal im Voraus!
Gruss
WZ
ich stehe vor einem Problem, welches mir schon einiges an Zeit und viel Nerven gekostet hat, obwohl es eigentlich simpel ist.
Aufgabenstellung:
Ein HyperV-VM-Snapshot soll automatisiert, täglich wiederhergestellt werden.
Ich habe dazu eine PS-Script-Datei .ps1 mit folgendem Inhalt erstellt:
Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob
Der Task-Job enthält (- wurde schon mit dem lokalen, als auch mit einem Domain - Admin ausgeführt, ohne Ergebnisänderungen):
Action: Start a program
Program/Script: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
Add arguments: -file "C:\Hyper-V\RestoreW2K8DEMO_Base_Snapshot.ps1"
Problembeschreibung:
Führt man obigen Command "Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob" oder auch den Scriptaufruf direkt in der PS-Console aus, funktioniert es wunderbar.
Wird es über den Task-Scheduler ausgeführt, behauptet dieser dass der Task ausgeführt wurde, es passiert aber genau nichts. Kein Ereigniseintrag oder Sonstiges.
Auch die UAC wurde schon versuchsweise deaktiviert, doch ohne Erfolg.
Ich hoffe, jemand von euch kann mir weiterhelfen...
Danke schon mal im Voraus!
Gruss
WZ
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272453
Url: https://administrator.de/forum/powershell-aufruf-aus-task-scheduler-wird-nicht-ausgefuehrt-272453.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
4 Kommentare
Neuester Kommentar
Moin WZ,
das kommt daher das du den Parameter -AsJob verwendest. Dieser sagt aus das er im Hintergrund (Powershell-Job) erledigt werden soll also asynchron (Powershell wartet also nicht auf das Ende), und da dein Script sich danach bereits beendet, werden auch die Hintergrund-Jobs der Session abgewürgt! Bei einem Aufruf des Befehls in einer bereits geöffneten Powershell-Konsole passiert das nicht, da du sie ja offen lässt.
Du kannst z.B. im Script mit wait-job auf das Ende des Jobs warten oder alternativ den Parameter -AsJob weg lassen, dann erfolgt die Ausführung synchron.
Also entweder so
oder so:
Gruß jodel32
das kommt daher das du den Parameter -AsJob verwendest. Dieser sagt aus das er im Hintergrund (Powershell-Job) erledigt werden soll also asynchron (Powershell wartet also nicht auf das Ende), und da dein Script sich danach bereits beendet, werden auch die Hintergrund-Jobs der Session abgewürgt! Bei einem Aufruf des Befehls in einer bereits geöffneten Powershell-Konsole passiert das nicht, da du sie ja offen lässt.
Du kannst z.B. im Script mit wait-job auf das Ende des Jobs warten oder alternativ den Parameter -AsJob weg lassen, dann erfolgt die Ausführung synchron.
Also entweder so
Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob | wait-job
Restore-VMSnapshot -Name Base -VMName W2K8DEMO
Are you sure you want to perform this action?
Damit keine Abfrage kommt einfach den Parameter -Confirm auf false setzenRestore-VMSnapshot -Name Base -VMName W2K8DEMO -Confirm:$false