doubleuzed
Goto Top

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

Content-Key: 272453

Url: https://administrator.de/contentid/272453

Printed on: April 18, 2024 at 06:04 o'clock

Mitglied: 114757
Solution 114757 May 20, 2015, updated at May 21, 2015 at 09:04:16 (UTC)
Goto Top
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
Restore-VMSnapshot -Name Base -VMName W2K8DEMO -AsJob | wait-job
oder so:
Restore-VMSnapshot -Name Base -VMName W2K8DEMO
Gruß jodel32
Member: doubleUZed
doubleUZed May 21, 2015 at 09:03:53 (UTC)
Goto Top
Hallo jodel32,

danke für die schnelle AW.
Ich hatte es ursprünglich ohne den Parameter -AsJob konfiguriert. Den hatte ich erst in den vielen (mittlerweile verzweifelten) Versuchen hinzugefügt, weil ich bei Tests aus der CMD heraus auf eine Bestätigungsanfrage für die Durchführung gestossen bin, was mich auf die Idee brachte, dass dies der mögliche "Schranken" bei der Taskausführung sein könnte:
C:\Users\euadminwz>C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -file "C:\Hyper-V\RestoreW2K8DEMO_Base_Snapshot.ps1"

Confirm
Are you sure you want to perform this action?
Restore-VMSnapshot will restore snapshot "Base".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):

Habe aber dennoch deinen Rat befolgt und das Script entsprechend angepasst. Die einzige Änderung war, dass die Powershell.exe im aktiven Speicher hing, absolut nichts machte und nach Ablauf der Stop-Task-Zeitspanne (1h) beendet wurde.
Die VM tangierte das jedoch nicht und wurde nicht auf den Snapshot zurückgesetzt.

ABER der andere Tipp mit der Erweiterung "| wait-job" ist schlichtweg genial und des Rätsels Lösung!!!!! face-smile

Danke dir vielmals und wünsche dir einen schönen Tag!

VG
doubleUZed
Mitglied: 114757
114757 May 21, 2015 at 09:18:16 (UTC)
Goto Top
Are you sure you want to perform this action?
Damit keine Abfrage kommt einfach den Parameter -Confirm auf false setzen
Restore-VMSnapshot -Name Base -VMName W2K8DEMO -Confirm:$false
Gruß jodel32
Member: doubleUZed
doubleUZed May 22, 2015 at 13:30:13 (UTC)
Goto Top
Hallo jodel32,

auch das hatte ich versucht, doch damit hat es auch nicht funktioniert. - deswegen dann der Versuch mit dem Parameter -AsJob
Du hast natürlich recht, in der CMD kann die Bestätigungsabfrage damit verhindert werden...

VG
doubleUZed