zimbosmurf
Goto Top

Batch-Script does not work when run by TaskScheduler

Hi!

Ich habe ein einfaches Batchskript, das - neben ein paar Logausgaben per "echo" - nur aus einer einzigen Zeile besteht:

xcopy "O:\pfad\*.*" "D:\anderer pfad\*.*" /C /E /Y  

O: ist ein verbundenes Netzlaufwerk
D: ist eine lokale Festplatte

Wenn ich dieses Skript manuell per Doppelklick oder in einem command-window starte kopiert es wie erwartet die Dateien vom Netzlaufwerk auf die lokale Festplatte.

Es gibt einen Task im Taskscheduler, das dieses Skript jeden Tag zu einer bestimmten Uhrzeit aufruft.
Im TaskScheduler wird das Skript vom gleichen User aufgerufen, mit dem ich es auch testweise per Doppelklick aufrufe.
Als Argument wird
>"D:\anderer pfad\skriptLog.txt"  
übergeben um die oben genannten Logausgaben des Skripts in eine Datei umzuleiten.
Als "Start in" ist der Pfad, in dem das Skript liegt (und in dem ich es auch manuell starte) festgelegt.

Wenn dieser Task ausgeführt wird (automatisch oder per "Run" im TaskScheduler), landen alle Logprints, aber die einzige Ausgabe des xcopy-Befehls ist "0 File(s) copied". Es wird schlicht und einfach NICHTS kopiert. Und ich bin ehrlichgesagt ziemlich ratlos, wie das sein kann.

Ich habe testweise noch ein
dir "O:\pfad\"  
eingefügt - das generiert NULL output. Kein Directorylisting, keine Fehlermeldung, nichts.

Hat irgendjemand eine Idee, wo ich mit der Suche anfangen könnte?

Content-ID: 32620359225

Url: https://administrator.de/forum/batch-script-does-not-work-when-run-by-taskscheduler-32620359225.html

Ausgedruckt am: 25.12.2024 um 07:12 Uhr

mbehrens
Lösung mbehrens 16.05.2024 um 15:00:40 Uhr
Goto Top
Zitat von @zimbosmurf:

Hat irgendjemand eine Idee, wo ich mit der Suche anfangen könnte?

In welchem Kontext wird das Script ausgeführt?
Hat diese Umgebung überhaupt Zugriff auf die Dateifreigaben und werden diese auch zugewiesen?
zimbosmurf
zimbosmurf 16.05.2024 um 15:03:32 Uhr
Goto Top
Eine idee für eine Ursache kam mir gerade selbst:
Die Netzlaufwerke werden alle beim Login des Users automatisch verbunden. Tasks, die vom TaskScheduler gestartet werden, laufen ja wohl irgendwie in einer eigenen Session.
Mein Verdacht, dass das Netzlaufwerk, obwohl es im Benutzerkonto zur Verfügung steht, im TaskScheduler nicht zur Verfügung steht scheint sich zu bestätigen: Wenn ich ein
dir "d:\anderer pfad"  
im Skript einfüge habe ich im Logfile das korrekte Directorylisting stehen.

Ich schaffe es heute nicht mehr, das auszuprobieren, aber kann es sein, dass ich das Netzlaufwerk im Skript mit
net use
mappen muss?

Aber warum bekomme ich dann keine Ausgabe "The system cannot find the path specified" wenn ich ein "dir" auf einem Laufwerk mache, das es gar nicht gibt?
TK1987
Lösung TK1987 16.05.2024 um 15:03:57 Uhr
Goto Top
Moin,

ein Skript welches über die Aufgabenplanung ausgeführt wird läuft in einer anderen Session, daher sind Netzlaufwerke dort nicht verbunden. Ersetze das Netzlaufwerk durch einen UNC-Pfad.

Gruß Thomas
em-pie
Lösung em-pie 16.05.2024 um 15:06:03 Uhr
Goto Top
Moin,

Da O:\Pfad ein per Script/ GPO gemepptes Laufwerk ist, existiert das zum zur Laufzeit aus dem Script nicht. Da werden keine Startscripte/ GPOs geladen.
Du musst einfach in deine Batch das notwendige net usw. o: \\myServer\Share angeben oder in deinem XCOPY direkt auf das Share verweisen.

P.S. Ich würde ja Robocopy nehmen face-wink
13034433319
Lösung 13034433319 16.05.2024 aktualisiert um 15:11:07 Uhr
Goto Top
Gemappte Netzlaufwerke werden Session- und Userabhängig gemappt und sind nur verfügbar wenn die Option Nur ausführen wenn der Benutzer angemeldet ist gewählt wird oder für Admins wenn in der Registry der Key EnableLinkedConnections gesetzt wird.
das generiert NULL output. Kein Directorylisting, keine Fehlermeldung, nichts.
Dann hast du wohl nur StdOut in die Datei geschrieben statt StdErr face-wink da musst du schon die StdErr Ausgabe umleiten dann siehst du den Fehler:
dir "O:\pfad" 2>mylog.txt
Nimm Robocopy mit UNC Pfad
robocopy "\\Server\share\pfad" "D:\anderer pfad" /e /copyall
Merke, niemals gemappte Laufwerke in Skripten benutzen sondern besser immer UNC Pfade.

Gruß
erikro
Lösung erikro 16.05.2024 um 15:07:48 Uhr
Goto Top
Moin,

Grundregel beim Skripten: Nimm niemals lokale Pfade für den Netzwerkzugriff, sondern immer UNC. Ersetze also o:\wasauchimmer mit \\server_mit_o\freigabe_für_o.

hth

Erik
zimbosmurf
zimbosmurf 17.05.2024 um 08:47:18 Uhr
Goto Top
Hi!

Danke für die vielen Antworten. Ich hab' das Skript von meiner Vorgängerin übernommen und heute nach ein paar Tagen erst festgestellt, dass das schon seit über einem Jahr seinen Job nicht gemacht hat... face-smile

Liebe Grüße,

Thomas