berlinger
Goto Top

For Schleife mit Errorlevel

Hallo Zusammen

ich versuche aus einer Text-Datei die IP-Adresse auszulesen und anschließend via PSEXEC auf dem Zielrechner einen Registry-Key auszulesen.

- Auslesen aus der Text-Datei funktioniert
- Verbinden via PSEXEC funktioniert auch
- Zugriff auf Remote-Registry ist auch OK

for /f "delims=" %%a in (IPs.TXT) do (  

    "%SYSTEMDRIVE%\Tools\CopyByRoby\BIN\psexec.exe" \\%%a -u xxx -p xxx -h -accepteula reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /V "Model"     

    IF %ERRORLEVEL% EQU 2 ECHO OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
    IF %ERRORLEVEL% NEQ 2 ECHO NO >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
)

Log.txt werden nun alle Rechner als OK eingetragen, daher Errorlevel 2. Da ich aber Rechner dort abfrage die nicht Online sind, dürfte dies doch nicht sein oder?

Meine Idee später ist, ein Log zu haben mit der Übersicht welche OK sind und welche nicht... und mit denen welche nicht OK sind kann man dann noch ein wenig spielen face-smile

Ja, mit dem ReturnCode 0 habe ich es auch versucht, funktionierte auch nicht. Obwohl PSEXEC nach jedem Rechner sagt "reg exited on XXX.XXX.XXX.XXX with error code 0" - ist wohl vermutlich aber der ErrorCode von REG Query selber..

Weiß einer von Euch Rat?

LG

Content-Key: 246056

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

Printed on: April 24, 2024 at 03:04 o'clock

Member: bastla
bastla Aug 09, 2014 updated at 16:28:42 (UTC)
Goto Top
Hallo berlinger!

Dein Stichwort wäre "delayedExpansion" - allerdings ist es gar nicht nötig, die Variable %ERRORLEVEL% abzufragen:
IF ERRORLEVEL 3 (
    ECHO NO >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
) ELSE (
    ECHO OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
)
Bei dieser Art der Abfrage wird allerdings auf "größer/gleich" getestet, sodass also 0,1 und 2 "OK" wären ...

Wenn nur zwischen 0 und nicht 0 zu unterscheiden wäre, könntest Du direkt an den Befehl
... && ECHO ERRORLEVEL ist 0 || ECHO ERRORLEVEL ist nicht 0
anfügen.

Grüße
bastla
Member: berlinger
berlinger Aug 09, 2014 updated at 16:16:15 (UTC)
Goto Top
danke Dir

bin schon ein wenig weiter... musste noch 2 Sachen anpassen, Script hat sich davor gleich wieder geschlossen..

habe gerade festgestellt, dass der Errorlevel welcher PSEXEC ausgibt, der in meinem Fall von REG Query ist.

bei mir ist es nun so, dass gewisse Rechner auf die PSEXEC zugreifen will gar nicht online sind oder der Zugriff verweigert wird, daher ist kein REG Query möglich.

in anderen Foren habe ich gelesen, dass hier alles ausser ERRORLEVEL 0 zeigt, dass was nicht OK ist.

Dennoch schreibt es mir im Log bei Allen, es wäre Errorlevel 0 - also OK

setlocal ENABLEDELAYEDEXPANSION

:START

for /f "delims=" %%a in (IPs.TXT) do (  

    "%SYSTEMDRIVE%\Tools\CopyByRoby\BIN\psexec.exe" \\%%a -u xxx -p xxxx -h -accepteula reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /V "Model"     
    SET SYSTEM=%%a
    IF !ERRORLEVEL!==0 (
    ECHO !SYSTEM! Updater OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"   
    ) ELSE (
    ECHO !SYSTEM! Updater NOT OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
)
)
Member: bastla
bastla Aug 09, 2014 at 16:32:29 (UTC)
Goto Top
Hallo berlinger!

Die Errorlevel-Rückgabe von "PsExec" musst Du selbst austesten, auf die Variable !ERRORLEVEL! würde ich aber weiterhin nicht abfragen:
for /f "delims=" %%a in (IPs.TXT) do (  
    "%SYSTEMDRIVE%\Tools\CopyByRoby\BIN\psexec.exe" \\%%a -u xxx -p xxxx -h -accepteula reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /V "Model" && (  
        ECHO %%a Updater OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
    ) || (
        ECHO %%a Updater NOT OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
    )
)
Grüße
bastla
Member: berlinger
berlinger Aug 09, 2014 at 17:56:47 (UTC)
Goto Top
@bastla
Danke, stimmt den Teil mit dem Errorlevel habe ich verdrängt...

Bin nun unterwegs... daher kann ich es erst später testen

Verstehe ich das richtig, dass du die ausgabe ins log "pipest" ?

Wenn ja wie kann ich das für weitere schritte verwenden? Daher bei ok mach noch das und bei not ok das?

Sorry, aber ich stehe da gerade auf dem schlauch

Warum eigentlich Ohne errorlevel?
Member: bastla
bastla Aug 09, 2014 at 18:48:04 (UTC)
Goto Top
Hallo berlinger!
erstehe ich das richtig, dass du die ausgabe ins log "pipest" ?

Wenn ja wie kann ich das für weitere schritte verwenden? Daher bei ok mach noch das und bei not ok das?
Das kannst Du zusätzlich zum Loggen doch gleich mit erledigen:
for /f "delims=" %%a in (IPs.TXT) do (  
    "%SYSTEMDRIVE%\Tools\CopyByRoby\BIN\psexec.exe" \\%%a -u xxx -p xxxx -h -accepteula reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /V "Model" && (  
        ECHO %%a Updater OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
        MachNochDas
    ) || (
        ECHO %%a Updater NOT OK >>"%SYSTEMDRIVE%\Tools\CopyByRoby\LOG.txt"  
        MachWasAnderes
    )
)
Warum eigentlich Ohne errorlevel?
Ist einfacher und braucht keine "delayedExpansion" - wobei ja ohnehin der Errorlevel geprüft wird (auf 0 oder eben nicht 0) ...

Grüße
bastla