Script wird vom Task Scheduler nicht korrekt gestartet

DeusExMachina

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
369
Hallo zusammen

Ich hab ein Problem mit dem Task Scheduler

Ich habe einen Cron Job angelegt
Als einzige Action ist Angelegt Start Programm

Programm/script
"C:\Program Files\PowerShell\7\pwsh.exe"

Add arguments:
-File "C:\Script\sync\main.ps1" -main

Start In
C:\Script\sync

Die Main startet so:
PowerShell:
param (
    [switch]
    $main,
    [switch]
    $checkData,
    [int]
    $resetId
)


if($main) {
    main
} elseif($checkData) {
    checkData
} elseif($resetId -gt 0) {
    resetId -id $resetId
} else {
    Write-Host "invalid call please call -help for help" #TODO create help
}

Aber wenn der Task ausgeführt wird läuft er etwa eine Sekunde und ist dann fertig (was bedeutend zu kurz ist das Script ist zwar recht schlank aber so schlank auch wieder nicht)

Was mache ich falsch? Warum startet das Script nicht?

Starte ich es in der Powershell Console ohne parameter lande ich in der gewünschten Fehlermeldung
Starte ich es in der Console mit -main öffnet sich auf meinem Taskserver der Mouse Properties Dialog von Windoof

ich brauche etwas Hilfe
weil ich nicht verstehe was ich falsch gemacht habe und nicht weiß wo ich mit den Windows Board mitteln den Fehler einkreisen kann

Danke für eure hilfe
 
Mit welchen Benutzer wird denn der Scheduled Task ausgeführt?

Und versuch mal statt "main" "C:\Windows\System32\main.cpl". Vielleicht irgendein Thema mit der Path-Variable?

Ich vermute mal, dass Zeilen 14 und 16 Platzhalter für weiteren Code oder zusätzliche Cmdlets/Functions sind? Wobei das ja erst mal egal ist.
 
Zuletzt bearbeitet:
Moin,

was für ein Windows nutzt du? 10? 11?

Die Powershell.exe liegt standardmäßig unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Wo hast du den Pfad her?
DeusExMachina schrieb:
Programm/script
"C:\Program Files\PowerShell\7\pwsh.exe"
 
  • Gefällt mir
Reaktionen: aragorn92
Tempest17 schrieb:
Moin,

was für ein Windows nutzt du? 10? 11?

Die Powershell.exe liegt standardmäßig unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Wo hast du den Pfad her?
Er verwendet Powershell 7, was man parallel zur vorinstallierten Windows Powershell installieren kann
 
kartoffelpü schrieb:
Mit welchen Benutzer wird denn der Scheduled Task ausgeführt?

Und versuch mal statt "main" "C:\Windows\System32\main.cpl". Vielleicht irgendein Thema mit der Path-Variable?

Ich vermute mal, dass Zeilen 14 und 16 Platzhalter für weiteren Code oder zusätzliche Cmdlets/Functions sind? Wobei das je erst mal egal ist.

Eigentlich steht da ein anderer Parameter ich hab den Code nur vereinfacht.

Das mit Main ist aber interessant vielleicht benenne ich die function main mal Testweise um.

14 und 16 sind andere Funktionen in der main.ps1
 
DeusExMachina schrieb:
Das mit Main ist aber interessant
Mich wundert eh, dass Powershell bei "main" die main.cpl startet, in einem command prompt (oder Win + R) ist das nicht so.
 
macht sie ja nicht das main.ps1 file in dem übergebenen Ordner wird ausgeführt
und dann springt PS aus dem Script und startet die Maus Configuration total strange
 
Soll Zeile 12 auch eine Funktion sein (wie 14,16)? Dann definiere sie mal testweise vor der Schleife oder nimm eine andere Bezeichnung.
 
passt denn die ExecutionPolicy für das Script?
ggf. den Parameter beim Aufruf ergänzen
 
derlorenz schrieb:
Soll Zeile 12 auch eine Funktion sein (wie 14,16)? Dann definiere sie mal testweise vor der Schleife oder nimm eine andere Bezeichnung.

ja der Aufruf funktioniert auch auf der lokalen Büchse
und welche schleife meinst du?
doch nicht den Conditional?

XN04113 schrieb:
passt denn die ExecutionPolicy für das Script?
ggf. den Parameter beim Aufruf ergänzen

das was oben steht ist konfiguriert mehr nicht
 
kartoffelpü schrieb:
genau das ist ja die main.cpl.

Sry das hatte ich vorhin überlesen
Werde ich testen.

Dann wundert es mich zwar warum das nur auf meiner Task Büchse passiert und nicht auch auf dem Devsystem .

Aber dann probiere ich es mal mit einer eineindeutigen Benennung für Scriptdatei und Main Funktion
 
Ich habe die main umbenannt und für hier heißt sie jetzt user_sync

So das sich der Aufruf ändert in
-File "C:\Script\sync\sync.ps1" -run

PowerShell:
param (
    [switch]
    $run,
    [switch]
    $checkData,
    [int]
    $resetId
)


if($run) {
    user_sync
} elseif($checkData) {
    checkData
} elseif($resetId -gt 0) {
    resetId -id $resetId
} else {
    Write-Host "invalid call please call -help for help" #TODO create help
}

Jetzt bekomme ich aber diese Fehlermeldung:

PowerShell:
Line |
  13 |      user_sync
     |      ~~~~~~~~~~~~~
     | The term 'user_sync' is not recognized as a name of a cmdlet, function, script file, or executable program.
     | Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

In VS Code tritt das nur beim ersten Start versuch auf in der Console jedes mal.
Die Funktion ist in keinem Modul sondern liegt in der Datei die gestartet wird.

Ich verstehe nicht wirklich was Powershell da treibt und komm deswegen auch nicht wirklich weiter.



EDIT: Verdammt in die Script falle getappt, Powershell muss die Funktionen erstmal initialisieren.
Der Konditional muss ans Ende der Datei
 
Zuletzt bearbeitet:
Funktioniert es denn jetzt? Ich habe den Code mal bei mir laufen lassen und die Maus Eigenschaften öffnen sich.
 
ja jetzt läuft es

ich nehme an das dadurch das die function main erst nach dem Konditional deklariert war "wusste" Powershell nicht was gemeint war.
Aber anstatt einen Fehler zu werfen hat es etwas genommen das an anderer Stelle irgendwo im Powershell importiert war (die main.cpl) und hat diese aufgerufen

für den Task Scheduler war die script Ausführung dann erfolgreich und es wurden keine Fehler gelogt.

---

Warum das auf der Testbüchse nicht passiert ist ka.
Würde spontan auf ein anderes Scoping im Hintergrund tippen.
 
Zurück
Oben