petergyger
Goto Top

Powershell 5.1: Modul "ScheduledTask"

Hallo
Nach einer halben Nacht in meinem privaten Testlab (Win 10 PC und Win 11 PC) mit diversen Versuchen und Informationen aus den Büchern von Schwichtenberg und Weltner wende ich mich an die Profis.

Ziel:
Mit dem Modul "ScheduledTasks" in PS 5.1 ein PS Skript (c:\windows\tool\kallisto.ps1) als Task starten. Dieses Skript schreibt in eine Textdatei (c:\temp\107log.txt)

Skript:
So sieht das Skript aktuell aus
skript-1

Shell:
In der Shell sieht man, dass wenn ich das Skript direkt starte wird die Textdatei erstellt.
ps-1

Aufgabenplanung:
Der Fehler 0x80070002 besagt "File not found"
task-1

Workaround
Wenn ich über das Cmdlet "Register-ScheduledTask" das PS Skript über einen Batch ("run.cmd") starte, läuft es einwandfrei.
skript-2

Ich werde asap das starten des PS Skripts über das Modul "PSScheduledJob" näher anschauen.

Ich habe in meinem Leben bereits mit einigen OS / Sprachen gearbeitet. Und ich akzeptiere einfach nicht, dass PS 5.1 in einer so einfachen Aufgabe nicht mitspielt.

Grüsse an alle Foristen

Content-ID: 7112038708

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

Ausgedruckt am: 21.11.2024 um 15:11 Uhr

PeterGyger
PeterGyger 11.05.2023 um 15:39:35 Uhr
Goto Top
XML Datei

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<URI>\tarqeq1016</URI>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<StartBoundary>2023-05-11T14:45:00+02:00</StartBoundary>
<Enabled>true</Enabled>
</TimeTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-3824163325-2661386327-2409028183-1001</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<Duration>PT10M</Duration>
<WaitTimeout>PT1H</WaitTimeout>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ep bypass -c
-Argument
-NoProfiIe
-File c:\windows\tool\kallisto.ps1
-WorkingDirectory c:\windows\tool</Command>
</Exec>
</Actions>
</Task>
3063370895
Lösung 3063370895 11.05.2023 aktualisiert um 15:41:32 Uhr
Goto Top
Hi

$taskname = "task"  

$taskaction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-EP Bypass -File "c:\windows\tool\kallisto.ps1"'  
$tasktrigger = New-ScheduledTaskTrigger -Once -at 15:41

Register-ScheduledTask -TaskName $taskname -Trigger $tasktrigger -Action $taskaction

-Thomas
Celiko
Celiko 11.05.2023 aktualisiert um 15:44:47 Uhr
Goto Top
Moin,

Für das Verständnis:
Du musst dem scheduled task sagen, welches Programm er starten soll (powershell) und ihm dann Argumente mitgeben, was er tun soll (-file [filepath]).

Nur auf eine powershell Datei zu verweisen geht leider nicht (Grund mir gerade unbekannt :X, weiß aber dass es so ist haha)

Sonst geht das nicht. Siehe Antwort von @3063370895

Vg
Celiko
3063370895
3063370895 11.05.2023 um 15:49:22 Uhr
Goto Top
Nur auf eine powershell Datei zu verweisen geht leider nicht (Grund mir gerade unbekannt :X, weiß aber dass es so ist haha)

Aus dem selben Grund, warum du eine ps1-Datei nicht mit Doppelklick starten kannst, ps1-Dateien sind per Definition keine ausführbaren Dateien.

-Thomas
PeterGyger
PeterGyger 11.05.2023 um 16:15:38 Uhr
Goto Top
Zitat von @3063370895:

Hi

$taskname = "task"  

$taskaction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-EP Bypass -File "c:\windows\tool\kallisto.ps1"'  
$tasktrigger = New-ScheduledTaskTrigger -Once -at 15:41

Register-ScheduledTask -TaskName $taskname -Trigger $tasktrigger -Action $taskaction

-Thomas

Hallo Thomas

Besten Dank! As usual funktioniert Deine Lösung.
Das Skript von Schwichtenberg (Kapitel 26) übergibt keine Daten mit der Option "Argument".

Etwas gelernt heisst, es war ein guter Tag face-wink

Beste Grüsse
3063370895
3063370895 11.05.2023 um 16:24:03 Uhr
Goto Top
Tatsächlich ist da im Buch ein Fehler
2023-05-11 16_22_20-img_0089. ‎- windows-fotoanzeige

Soll wohl heißen
$TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -File $PS1Path" -WorkingDirectory $(Split-Path -Path $PS1Path)  

-Thomas
PeterGyger
PeterGyger 11.05.2023 um 16:42:39 Uhr
Goto Top
Zitat von @3063370895:

Tatsächlich ist da im Buch ein Fehler
2023-05-11 16_22_20-img_0089. ‎- windows-fotoanzeige

Soll wohl heißen
$TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -File $PS1Path" -WorkingDirectory $(Split-Path -Path $PS1Path)  

-Thomas

Hallo Thomas
Danke für die Verifikation.
Deine letzte Lösung (16:24 Uhr) getestet.
"Schiff" wieder versenkt face-wink

D.h. aber auch, dass die Option "Execution Policy" (EP) fakultativ ist.
IMHO setzt man die Option, falls auf einem Win Client die PS Skripte Policy nicht bereits freigegeben sind.

Nochmals danke für die Zeit und den Input

Beste Grüsse
3063370895
3063370895 11.05.2023 aktualisiert um 17:01:02 Uhr
Goto Top
IMHO setzt man die Option, falls auf einem Win Client die PS Skripte Policy nicht bereits freigegeben sind.

Korrekt, ich setze "-EP Bypass" hier im Forum immer davor, damit die EP des Systems nicht dazwischenfunken kann.

-Thomas
WoitschekBF3
WoitschekBF3 11.05.2023 um 19:43:59 Uhr
Goto Top
Wenn ich mich nicht irre ist das ausführen von ps scripten ein sicherheitsrisiko daher nicht direkt im aufgabenplaner möglich. Starte das script per batch, dann sollte es funktionieren