Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

return codes werden in batch-datei fehlerhatft ausgewertet

Frage Microsoft Windows Tools

Mitglied: thomaskunze

thomaskunze (Level 1) - Jetzt verbinden

15.12.2008, aktualisiert 15:26 Uhr, 5069 Aufrufe, 2 Kommentare

Hallo,

ich veruche mich an meinem ersten (kleinen) script, um remote-clients herunterzufahren. Dazu nutze ich psshutdown und eine Textdatei mit den Namen der PCs. Allerdings möchte ich evt. auftretende Fehler in einer weiteren Textdatei dokumentieren, weshalb ich nicht einfach die Rechnerliste an psshutdown übergeben kann.
Meine batch-Datei auzurufen unter XP/Vista(als Administrator) - getestet unter Vista:

01.
@echo off 
02.
 
03.
if exist fehler.txt (del fehler.txt) 
04.
 
05.
For /F "tokens=1" %%a IN (rechner.txt) DO ( 
06.
 	echo. & echo Shutting down %%a: 
07.
 	psshutdown -k -c -m BLAH -t 600 \\%%a 
08.
	echo %errorlevel% 
09.
 	if errorlevel 0 (echo %%a - OK & echo %%a - OK >> fehler.txt) else (echo %%a - Fehler: %errorlevel% & echo %%a - Fehler: %errorlevel% >> fehler.txt) 
10.
11.
pause 
12.
exit
Mein Problem: Obwohl psshutdown "sinnvolle" return codes ausgibt (0 bzw. 1), liefert obiges script immer ein OK zurück auch wenn ich nicht existierende Rechner in der Liste stehen habe.

IMO müsste das script doch so stimmen oder nicht?

Vielen Dank für jede Erklärung/Tip!


Ausgabe der Batchdatei (der Rechner "zwerg" existiert, "26" nicht):

01.
D:\!Tools\PsTools>test.bat 
02.
 
03.
Shutting down zwerg: 
04.
 
05.
PsShutdown v2.52 - Shutdown, logoff and power manage local and remote systems 
06.
Copyright (C) 1999-2006 Mark Russinovich 
07.
Sysinternals - www.sysinternals.com 
08.
 
09.
Local system is scheduled to power off in 00:10:00. 
10.
 
11.
12.
zwerg - OK 
13.
 
14.
Shutting down 26: 
15.
 
16.
PsShutdown v2.52 - Shutdown, logoff and power manage local and remote systems 
17.
Copyright (C) 1999-2006 Mark Russinovich 
18.
Sysinternals - www.sysinternals.com 
19.
 
20.
Couldn't access 26: 
21.
Der Netzwerkpfad wurde nicht gefunden. 
22.
 
23.
Make sure that the default admin$ share is enabled on 26. 
24.
 
25.
If 26 is already performing a shutdown operation you must 
26.
abort it before issuing a different command. 
27.
 
28.
29.
26 - OK 
30.
Drücken Sie eine beliebige Taste . . .
An der Konsole hingegen:

01.
D:\!Tools\PsTools>psshutdown -k -c -m BLAH -t 600 \\zwerg 
02.
 
03.
PsShutdown v2.52 - Shutdown, logoff and power manage local and remote systems 
04.
Copyright (C) 1999-2006 Mark Russinovich 
05.
Sysinternals - www.sysinternals.com 
06.
 
07.
Local system is scheduled to power off in 00:10:00. 
08.
 
09.
 
10.
 
11.
D:\!Tools\PsTools>echo %errorlevel% 
12.
 
und

01.
D:\!Tools\PsTools>psshutdown -k -c -m BLAH -t 600 \\26 
02.
 
03.
PsShutdown v2.52 - Shutdown, logoff and power manage local and remote systems 
04.
Copyright (C) 1999-2006 Mark Russinovich 
05.
Sysinternals - www.sysinternals.com 
06.
 
07.
Couldn't access 26: 
08.
Der Netzwerkpfad wurde nicht gefunden. 
09.
 
10.
Make sure that the default admin$ share is enabled on 26. 
11.
 
12.
If 26 is already performing a shutdown operation you must 
13.
abort it before issuing a different command. 
14.
 
15.
 
16.
D:\!Tools\PsTools>echo %errorlevel% 
17.
1
Edit: Formatierung angepasst
Mitglied: Biber
15.12.2008 um 15:13 Uhr
Moin thomaskunze,

willkommen im Forum.
3 Tipps zu Deinem Schnipsel:
1) am besten < code >-Formatierung benutzen - siehe "Formatierungshilfe" beim Editieren oder in den FAQ

Problem ist, dass alles innerhalb einer FOR-Anweisung bis zur letzten schließenden KlammerZu vom CMD als EINE Codezeile aufgefasst wird und darin auch alle Variablen nur einmalig "errechnet"/aufgelöst werden. Nämlich am Beginn der Verarbeitung. Wenn die CMD.exe das Wort FOR liest sozusagen. Und deshalb hat auch %errorlevel% den Wert, den es schon beim ersten Lesen dieses Wortes hatte.

2) Workaround I
01.
@echo off & setlocal enableDelayedExpansion 
02.
 
03.
if exist fehler.txt (del fehler.txt) 
04.
 
05.
For /F "tokens=1" %%a IN (rechner.txt) DO ( 
06.
    echo. & echo Shutting down %%a: 
07.
    psshutdown -k -c -m BLAH -t 600 \\%%a 
08.
    if not errorlevel 1 ( 
09.
         echo %%a - OK  
10.
         echo %%a - OK >> fehler.txt 
11.
    ) else (  
12.
        echo %%a - Fehler: !errorlevel!  
13.
        echo %%a - Fehler: !errorlevel! >> fehler.txt) 
14.
15.
 pause 
16.
exit
3) Workaround II - mit Call:Block
01.
@echo off 
02.
 
03.
if exist fehler.txt (del fehler.txt) 
04.
 
05.
For /F "tokens=1" %%a IN (rechner.txt) DO call :brezeldown %%a 
06.
 pause 
07.
exit 
08.
goto :eof 
09.
 
10.
:brezeldown Parameter %1 ist der Rechnername/IP (vorher %%a) 
11.
echo. 
12.
echo Shutting down %1: 
13.
psshutdown -k -c -m BLAH -t 600 \\%1 
14.
if errorlevel 1 ( 
15.
        echo %1 - Fehler: %errorlevel%  
16.
        echo %1 - Fehler: %errorlevel% >> fehler.txt) 
17.
        goto :eof 
18.
19.
:: else-Fall: Errorlevel war NICHT 1 oder höher 
20.
   echo %1 - OK  
21.
   echo %1 - OK >> fehler.txt 
22.
goto :eof
Grüße
Biber
[Edit] Tippfehlerkorrektur, [/Edit]
Bitte warten ..
Mitglied: thomaskunze
15.12.2008 um 15:26 Uhr
Vielen Dank für die prompte Antwort! Ich werde Deine Vorschläge gerne ausprobieren!

Viele Grüße,

Tom

Edit: Es hat (natürlich) geklappt. Nochmals vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell - WMI Return Codes unterdrücken, WIE?
gelöst Frage von instinctlessBatch & Shell3 Kommentare

Hi, ist vermutlich ne noob frage aber ich habe folgendes Problem Folgender Aufruf in einem Script gibt auf der ...

Batch & Shell
Wenn Prozess läuft kann Batch den Code nicht weiterverarbeiten?
gelöst Frage von spookypoofBatch & Shell11 Kommentare

Hallo, Ich hab ein Problem. Ich hab z.B. zwei verschiedene Menü's und im zweiten Menü starte ich eine Datei. ...

C und C++
Methode multiple return values
gelöst Frage von mayho33C und C++8 Kommentare

Hallo Community, ich habe wieder mal eine Frage und hoffe auf eure KnowHow! Ich möchte eine Methode erstelle die ...

Windows 8
PATH wird nicht ausgewertet - Windows 8.1 Pro
gelöst Frage von killtecWindows 84 Kommentare

Hallo zusammen, folgendes Problem: Ich kann keine std. Befehle merh aufrufen. Gehe ich direkt in c:\windows\system32 und starte den ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 1 StundeErkennung und -Abwehr

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücke Spectre und ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...