arduino
Goto Top

Script kann nicht als Task ausgeführt werden

Hallo

Kennt jemand folgendes Problem

Ich habe verschiedene Powershell Scripts *, welche wenn ich sie direkt ausführe normal funktionieren. Wenn ich einen Task einrichte, der dieses ausführen soll, erscheint im Log des Tasks kein Fehler und der Return Code ist 0x0, sollte also abgeschlossen sein. Jedoch passiert nichts.
Testweise habe ich den angemeldeten Benutzer genommen, unter dem ich das Script ausühren kann. Jedoch mit dem selben Ergebnis

das Problem betrifft den Windows Server 2016

Hat jemand eine gute Idee/Lösug?

Vielen Dank im Voraus und frohe Festtage allerseits

Grüsse
arduino

  • Betrifft z.B. Filesystem Bereinigungen oder Berechtigung von Exchange Mailboxen

Content-ID: 526253

Url: https://administrator.de/forum/script-kann-nicht-als-task-ausgefuehrt-werden-526253.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

ITvortex
ITvortex 17.12.2019 aktualisiert um 15:31:06 Uhr
Goto Top
Hey,

wie sieht den dein Aufruf im Task Planer aus?

LG
Bitboy
Bitboy 17.12.2019 um 15:50:27 Uhr
Goto Top
Hi,

neben dem Aufruf, wie sieht das Script aus? Erwartet es irgendwelche Usereingaben oder startets ne Gui?

Grüße
erikro
erikro 17.12.2019 um 15:55:22 Uhr
Goto Top
Moin,

als geplanten Task musst Du das Skript so aufrufen:

Programm starte. In die Zeile Programm/Skript:

C:\Windows\System32\WindowsPowerShell\v1.0\powerShell.exe

und in die Zeile Argumente hinzufügen:

-command Pfad_Zum_PS-Skript

hth

Erik
rubberman
rubberman 17.12.2019 um 16:04:16 Uhr
Goto Top
Ggf. auch
-command "& 'Pfad_Zum_PS-Skript'"  
Und aufpassen - das Arbeitsverzeichnis ist höchstwahrscheinlich nicht das Scriptverzeichnis. Relative Pfade im Script sollten zu absoluten Pfaden gemacht werden.

Steffen
emeriks
emeriks 17.12.2019 um 16:13:10 Uhr
Goto Top
Wäre hier nicht Parameter "-file" die bessere Wahl?
erikro
erikro 17.12.2019 um 16:21:58 Uhr
Goto Top
Moin,

Zitat von @rubberman:

Ggf. auch
-command "& 'Pfad_Zum_PS-Skript'"  

Aus Neugier: Wozu der &? Das habe ich noch nie gebraucht. Was macht das?

Und aufpassen - das Arbeitsverzeichnis ist höchstwahrscheinlich nicht das Scriptverzeichnis. Relative Pfade im Script sollten zu absoluten Pfaden gemacht werden.

Oder man macht das Skriptverzeichnis zum Arbeitsverzeichnis mit

push-location $(Split-Path $Script:MyInvocation.MyCommand.Path)

Liebe Grüße

Erik
142232
142232 17.12.2019 aktualisiert um 16:45:10 Uhr
Goto Top
Zitat von @erikro:
Aus Neugier: Wozu der &? Das habe ich noch nie gebraucht. Was macht das?
Damit das überhaupt ausgeführt wird, denn ohne gibt die Powershell den Pfad zum Skript der in Hochkommas steht nur als reinen String in die Konsole aus face-wink.
Bei Pfaden mit Leerzeichen im Pfad oder im Dateinamen brauchst du das z.B. Alternativ geht auch der Punkt (.) dann wird dot-sourcing gemacht und alle aktuellen Variablen dem Skript verfügbar gemacht.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
rubberman
rubberman 17.12.2019 aktualisiert um 16:45:21 Uhr
Goto Top
Wäre hier nicht Parameter "-file" die bessere Wahl?
Wenn ich mich nur erinnern könnte bei welcher Gelegenheit mir das um die Ohren geflogen ist ... Bestimmt hatte ich irgendein Sonderzeichen im Pfad. Aber generell ist -file natürlich dafür gemacht.

Aus Neugier: Wozu der &?
Markiert den nachfolgenden String als auszuführendes Kommando. Bsp.
-c "a b.ps1" funktioniert nicht, da das Leerzeichen als Trennzeichen geparst wird.
-c "'a b.ps1'" gibt den Dateiname als String aus.
-c "& 'a b.ps1'" bringt's dann.

Steffen
erikro
erikro 17.12.2019 um 16:48:25 Uhr
Goto Top
Moin,

Zitat von @142232:
Bei Pfaden mit Leerzeichen im Pfad oder im Dateinamen brauchst du das z.B. Alternativ geht auch der Punkt (.) dann wird dot-sourcing gemacht und alle aktuellen Variablen dem Skript verfügbar gemacht.

Deshalb habe ich das noch nie gebraucht. Leerzeichen im Pfad? Tststststststs face-wink

Liebe Grüße

Erik
142232
142232 17.12.2019 aktualisiert um 16:56:52 Uhr
Goto Top
Zitat von @erikro:
Deshalb habe ich das noch nie gebraucht. Leerzeichen im Pfad? Tststststststs face-wink
Naja gibt ja auch noch andere mögliche Verwendungen wenn man z.B. den Pfad des Skripts in einer Variablen speichert und dann das Skript ausführen möchte
$pfad = 'C:\script.ps1'  
& $pfad -Parameter Bla
Oder man will einen Skriptblock ausführen, etc
$scriptblock = {
   write-host "Whatever"  
}
& $scriptblock
arduino
arduino 18.12.2019 um 11:41:45 Uhr
Goto Top
moin allerseits

wow, schon einige Antworten face-smile

zu den Details. Es handelt sich bei allen um Tasks, die selbständig ohne User Interaktion laufen (wie z.B. Filesystem Bereinigungen oder Berechtigung von Exchange Mailboxen)

Details zum Aufruf s. Screenshot unten. Ich habe beim Argument diverse Variationen versucht, mit "-command .\xy.ps1" (und den Pfad unter ausführen in, wie im Screenshot) sowie "-command Pfad\xy.ps1", leider immer mit dem selben Ergebnis

task

Grüsse
Arduino
142232
Lösung 142232 18.12.2019 aktualisiert um 12:09:22 Uhr
Goto Top
Die Argumente so schreiben:
-ExecutionPolicy ByPass -File "C:\Task_Scripts\X\AD\Save-ADGroups.ps1"
oder so
-ExecutionPolicy ByPass -Command "&'C:\Task_Scripts\X\AD\Save-ADGroups.ps1'"
Beide sind gleichwertig.

  • Und was macht das Skript genau?
  • Executionpolicy beachtet?
  • Wird dort auch sicher nur UNC-Pfade genutzt und keine gemappten Laufwerke und die Exchange-Verbindung wird richtig(wie) hergestellt?
  • Hat das Skript eine GUI? Wenn ja diese wird nur dargestellt wenn sie mit den richtigen Credentials läuft, denn nur diese haben Zugriff auf die Konsolensession für die Darstellung von sichtbaren Dialogen.
  • Wie sind die Berechtigungen des Tasks eingestellt?
  • Hast du dein Skript schon mal mit Start-Transcript / Stop-Transcript für ein Logging gekapselt? Wenn nicht mach das bitte mal.

Punkt für Punkt durchgehen und mal darüber nachdenken wie Tasks arbeiten dann klappt das auch.
emeriks
emeriks 18.12.2019 aktualisiert um 11:48:33 Uhr
Goto Top
Ich rufe PS-Scripte im Task Scheduler immer mit dem "-File" Parameter auf und hatte damit noch nie Probleme.

Bist Du Dir sicher, dass das Script nicht gestartet wird, oder macht es etwa nur nicht das, was es soll, was Du erwartest?
Du könntest im Script ein Debug-Logging einbauen. Dann würdest Du sehen, ob es überhaupt läuft, und wenn ja, wie weit es kommt, was es macht, welche Fehler ggf. auftreten.
arduino
arduino 23.12.2019 um 09:01:53 Uhr
Goto Top
Ich habe jetzt die Argumente so angegeben

Zitat von @142232:
Die Argumente so schreiben:
> -ExecutionPolicy ByPass -Command "&'C:\Task_Scripts\X\AD\Save-ADGroups.ps1'"
> 
Habe ich so gemacht

Executionpolicy beachtet?
Ja (s. Argumente oben)

Wird dort auch sicher nur UNC-Pfade genutzt und keine gemappten Laufwerke und die Exchange-Verbindung wird richtig(wie) hergestellt?
Ja

Hat das Skript eine GUI? Wenn ja diese wird nur dargestellt wenn sie mit den richtigen Credentials läuft, denn nur diese haben Zugriff auf die Konsolensession für die Darstellung von sichtbaren Dialogen.
Das Script läuft im Hintergrund und hat/benötigt keinerlei User Interaktion

Wie sind die Berechtigungen des Tasks eingestellt?
Ich habe einen extra User, der spezielle Berechtigungen für die Ausführung der Tasks und deren Aufgaben hat

Hast du dein Skript schon mal mit Start-Transcript / Stop-Transcript für ein Logging gekapselt? Wenn nicht mach das bitte mal.
Habe ich gemacht, und gesehen, dass es mit den richtigen Argumenten jetzt auch richtig durchläuft

Grüsse
Arduino