always1
Goto Top

ErrorCode von PSExec beziehen

Hallo zusammen,
Ich habe da ein Problem mit PSExec, das vermutlich so simpel zu lösen ist, dass ich mich anschließend wahrscheinlich schäme es hier eingestellt zu haben. Aber ein Versuch ist es allemal wert.

Also:
Ich möchte mittels PSExec aus einer Server-Batch heraus eine auf den einzelnen Clients lokal vorhandene Batchdatei ausführen. Diese Batchdatei gibt je nach Ablauf einen bestimmten ExitCode zurück, auf den ich dann ich dann in der Server-Batch entsprechend reagieren möchte.
Nun gibt PSExec zwar den Rückkehrcode der ausgeführten Batchdatei als Nachricht aus, aber wie kann ich diesen Rückkehrcode nun weiterverarbeiten? Da PSExec korrekt ausgeführt wurde habe ich im weiteren Verlauf der Serverbatch als Errorlevel lediglich "0", nicht aber den Rückkehrcode der ausgeführten Batch-datei.

Beispiel zur Verdeutlichung des Problems:
Wenn ich folgendes versuche
REM start SERVERBATCH

psexec \\computer -u user -p passwort localbatch.bat
ECHO %ERRORLEVEL%
...
(weitere Befehle)
...

REM ende SERVERBATCH

Dann bekomme ich als ERRORLEVEL immer "0" angezeigt, obwohl die localbatch.bat laut psexec-Meldung einen Rückkehrcode "5" hatte.

Wie komme ich für die weiteren Befehle innerhalb der Serverbatch jetzt an eben diesen Rückkehrcode?

Content-Key: 145078

Url: https://administrator.de/contentid/145078

Printed on: April 19, 2024 at 21:04 o'clock

Member: AndreasHoster
AndreasHoster Jun 17, 2010 at 15:06:29 (UTC)
Goto Top
Mein PSExec behauptet:
Error codes returned by PsExec are specific to the applications you execute, not PsExec.

Und tut auch so. Verwende PsExec 1.97
Vermutlich gibt nur ein Programm Errorlevel 5 zurück, aber nicht die gesamte Batch Datei.

Falls Du exit in der Batchdatei verwendest:
ExitBeendet das aktuelle Batchskript oder das Programm Cmd.exe (den Befehlsinterpreter) und kehrt zu dem Programm, das Cmd.exe gestartet hat, oder zum Programm-Manager zurück.

Syntax
exit [/b] [Beendigungscode]

Parameter
/b
Beendet das aktuelle Batchskript.
Beendigungscode
Gibt einen numerischen Wert an.
/?
Zeigt Hilfe an der Eingabeaufforderung an.
Hinweise
Wenn Sie /b außerhalb eines Batchskripts verwenden, führt das zur Beendigung von Cmd.exe.
Wenn Sie /b verwenden, legt Cmd.exe den ERRORLEVEL-Wert auf den angegebenen Beendigungscode fest. Wenn Sie Cmd.exe beenden, legt Cmd.exe den Prozessbeendigungscode mit dem unter Beendigungscode angegebenen Wert fest.
Member: always1
always1 Jun 18, 2010 at 06:30:54 (UTC)
Goto Top
Ich benutze tatsächlich exit in der auszuführenden Batch-Datei. Und damit gebe ich auch den entsprechenden ERRORLEVEL zurück. Das kommt auch bei PSEXEC korrekt an, wie die Ausgabe von PSEXEC verrät: "D:\SOFTWARE\mytest.bat exited on 192.168.10.25 with error code 5."
Aber wenn ich dann den ERRORLEVEL mit
ECHO %ERRORLEVEL%
ausgebe bekomme ich "0"
Wie komm ich an den korrekten ERRORLEVEL?
Member: Biber
Biber Jun 18, 2010 at 11:18:11 (UTC)
Goto Top
Moin always1,

wenn du
  • weder die oben geposteten Batchzeilen 2 und 3 in einer IF() oder FOR ..IN...DO ()-Anweisung stehen hast
  • noch einen anderen Befehl zwischen Zeile 2 und Zeile 3 aufrufst
... ist dieses Phänomen vollkommen unerklärlich, selbst bei den Redmonder Qualitätskriterien.

Gibt es eventuell noch irgendwelche Feinheiten in der o.g. Skizze, die eigentlich nicht wichtig genug waren, um sie hier zu veröffentlichen?

Grüße
Biber