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/contentid/526253

Printed on: September 10, 2024 at 10:09 o'clock

ITvortex
ITvortex Dec 17, 2019 updated at 14:31:06 (UTC)
Goto Top
Hey,

wie sieht den dein Aufruf im Task Planer aus?

LG
Bitboy
Bitboy Dec 17, 2019 at 14:50:27 (UTC)
Goto Top
Hi,

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

Grüße
erikro
erikro Dec 17, 2019 at 14:55:22 (UTC)
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 Dec 17, 2019 at 15:04:16 (UTC)
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 Dec 17, 2019 at 15:13:10 (UTC)
Goto Top
Wäre hier nicht Parameter "-file" die bessere Wahl?
erikro
erikro Dec 17, 2019 at 15:21:58 (UTC)
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 Dec 17, 2019 updated at 15:45:10 (UTC)
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 Dec 17, 2019 updated at 15:45:21 (UTC)
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 Dec 17, 2019 at 15:48:25 (UTC)
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 Dec 17, 2019 updated at 15:56:52 (UTC)
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 Dec 18, 2019 at 10:41:45 (UTC)
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
Solution 142232 Dec 18, 2019 updated at 11:09:22 (UTC)
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 Dec 18, 2019 updated at 10:48:33 (UTC)
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 Dec 23, 2019 at 08:01:53 (UTC)
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