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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 526253
Url: https://administrator.de/contentid/526253
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
14 Kommentare
Neuester Kommentar
Moin,
Aus Neugier: Wozu der &? Das habe ich noch nie gebraucht. Was macht das?
Oder man macht das Skriptverzeichnis zum Arbeitsverzeichnis mit
Liebe Grüße
Erik
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
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 .
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. ...
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. ...
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
Moin,
Deshalb habe ich das noch nie gebraucht. Leerzeichen im Pfad? Tststststststs
Liebe Grüße
Erik
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.
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
Liebe Grüße
Erik
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
Oder man will einen Skriptblock ausführen, etc
$pfad = 'C:\script.ps1'
& $pfad -Parameter Bla
$scriptblock = {
write-host "Whatever"
}
& $scriptblock
Die Argumente so schreiben:
oder so
Beide sind gleichwertig.
Punkt für Punkt durchgehen und mal darüber nachdenken wie Tasks arbeiten dann klappt das auch.
-ExecutionPolicy ByPass -File "C:\Task_Scripts\X\AD\Save-ADGroups.ps1"
-ExecutionPolicy ByPass -Command "&'C:\Task_Scripts\X\AD\Save-ADGroups.ps1'"
- 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.
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.
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.