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

In einer For-Schleife eine IF-Bedingung einfügen (Systeminformationen auslesen)

Frage Entwicklung Batch & Shell

Mitglied: Rookie84

Rookie84 (Level 1) - Jetzt verbinden

15.09.2006, aktualisiert 27.09.2006, 6785 Aufrufe, 14 Kommentare

Systeminformationen aller Windowsserver auslesen

Meine Aufgabe ist es die Systeminformationen aller Server auszulesen. Dies ist soweit auch kein Problem. Mein Programm liest aus einem Text-file "computer_domäne.txt" nacheinander alle Server ein und liest mit Hilfe des Befehls Systeminfo alle INformationen aus und schreibt sie in eine separate Datei:

date/t >Domäne_Server.txt
FOR /f %%f IN (computer_domäne.txt) DO (systeminfo /S %%f /U domäne\USer /P*/FO CSV /NH>>Dömäne_SERVER.txt)

Eine Erweiterung soll nun eine Fehlerüberprüfung sein. Sobald also der Server nicht angesprochen werden kann und/oder der Anmeldenamen und das Passwort nicht stimmen, soll der Servername und die Fehlermeldung in eine seperate Log-Datei geschrieben werden: >Domäne_LOG.txt.

Den Befehl von oben habe ich folgendermaßen mit zwei If-Bedingungen erweitert (und dem Befehl errorlevel, weiß nicht ob dieser richtig ist):

date/t >Domäne_Server.txt
date/t >Domäne_Log.txt
FOR /f %%f IN (computer_domäne.txt) DO (systeminfo /S %%f /U domäne\USer /P*/FO CSV /NH if ERRORLEVEL NEQ 0 %ERRORLEVEL% >>Domäne_LOG.txt if Errorlevel EQU 0 %%f >>Dömäne_SERVER.txt)

Leider funktioniert dieser BEfehl nicht:
Fehler: Argument/OPtion ungültig - 'if'
Geben sie Systeminfo /?um die Syntax anzuzeigen

Wäre euch sehr dankbar wenn ihr mir weiterhelfen könntet
Mitglied: Biber
20.09.2006 um 09:54 Uhr
Moin Rookie84,

eine Möglichkeit wäre so:
01.
::------snipp GetAllTheFckingSysteminfos.bat [ungetestet] 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
date/t >Domäne_Server.txt 
04.
date/t >Domäne_Log.txt 
05.
FOR /f %%f IN (computer_domäne.txt) DO ( 
06.
  (systeminfo /S %%f /U domäne\USer /P*/FO CSV /NH >%temp%\thisinfo.tmp)  
07.
   if !errorlevel! GEQ 1 ( 
08.
       echo  %time%: %%f - ErrorLevel !ERRORLEVEL!>>Domäne_LOG.txt  
09.
   ) ELSE ( 
10.
    echo %time%: %%f okay>>Dömäne_SERVER.txt 
11.
    type %temp%\thisinfo.tmp>>Dömäne_SERVER.txt 
12.
13.
14.
::-----Snapp GetAllTheFckingSysteminfos.bat
Wesentlich ist das Setzen der "DelayedExpansion" am Anfang des Batches und das Nutzen dieses Features durch Auswerten der "aktuellen" Errorlevel-Werte.
Das heißt, du musst
statt: %ErrorLevel% (= Wert von ErrorLevel beim Beginnen der FOR..IN..DO..Anweisung)
jetzt schreiben: !ErrorLevel! (= Wert von Errorlevel in der aktuell ausgeführten Schleife)

Eine andere Variante wäre das Ausführen des IF..ELSE-Teils in einem geCALLten Block.
[Beispiele dafür hier im Bereich Batch & Shell bei Forumssuche nach "DelayedExpansion"]
Ist aber so wie oben IMHO trotz alledem noch übersichtlicher.

Gruß
Biber
Bitte warten ..
Mitglied: Rookie84
20.09.2006 um 12:51 Uhr
Hallo Biber,

vielen Dank für deine Rückmeldung. Werde deinen Code nächste Woche ausprobieren (Urlaub) und Feedback geben ob das ganze funktioniert hat.

Gruß Rookie84
Bitte warten ..
Mitglied: Rookie84
26.09.2006 um 09:51 Uhr
Hallo Biber,

der Code funktioniert einwandfrei... Vielen DANK
(ausser eine abschließende Klammer fehlt, falls es jemanden interessiert)

Hab noch zwei (Bonus/Kosmetik)-Fragen.

1. wo befindet sich denn diese tmp-datei? wird diese automatisch wieder gelöscht?

2. in das Fehlerlog wird ja jetzt immer der Servername + das Errorlevel reingeschrieben. Soweit OK. Nur wird ansatt der eigtl Fehlermeldung immer nur "ERRORlevel 1" reingeschrieben. Wie kann ich die tatsächliche Fehlermeldung, die ausgegeben wird in das log reinschreiben?
(BSP. "FEHLER: Klasse nicht registriert" oder "FEHLER: Der RPC-Server ist nicht verfügbar" anstatt "Errorlevel 1")

Vielen Dank
Grüße


Vielen DANK
Bitte warten ..
Mitglied: Biber
26.09.2006 um 10:58 Uhr
Moin Rookie84,

auch kein Problem.
Die Fehlermeldung kannst Du nach demselben Muster zwischenspeichern und später in Deine Logdatei übernehmen.
01.
systeminfo /S %%f /U domäne\USer /P*/FO CSV /NH >%temp%\thisinfo.tmp <b>2>%temp%\err.tmp</b> 
02.
... 
03.
:: ... und unter die Zeile " 
04.
echo  %time%: %%f - ErrorLevel !ERRORLEVEL!>>Domäne_LOG.txt  
05.
::...noch eine Zeile " 
06.
type %temp%\err.tmp >>Domäne_LOG.txt
Die (jetzt ja schon zwei) *.tmp-Dateien sind in Deinem %temp%-Verzeichnis (siehe mit "set temp" am CMD-Prompt).
Und werden aus Schlampigkeit an Ende nicht gelöscht. Solltest Du noch ergänzen.

Gruß
Biber
Bitte warten ..
Mitglied: Rookie84
26.09.2006 um 13:26 Uhr
Danke... funktioniert natürlich wieder einwandfrei!

da ergibt sich doch gleich wieder eine Frage...

ist es auch möglich, diese beiden Informationen in eine Zeile zu schreiben?

BEispiel:
Alt/jetzt:
Server0001 - ErrorLevel 1
FEHLER: Der RPC-Server ist nicht verfgbar.

Neu/gewünscht: Server0001 - ErrorLevel 1 FEHLER: Der RPC-Server ist nicht verfgbar.

das müsste doch eigtl auch möglich sein oder? also das praktisch der echo und type-befehl in eine zeile eingefügt werden... ich hoffe ich habe mich nicht allzu kompliziert ausgedrückt...

achja und was bedeuted die "2" ->2>%temp%\err.tmp

Vielen Dank
Grüße
Rookie84

Vielen Dank
Bitte warten ..
Mitglied: Biber
26.09.2006 um 13:34 Uhr
Natürlich auch kein Problem... ist ja nur ein Bätschelchen, nix kompliziertes..

ändere den Fehlerzweig wie folgt:

01.
... 
02.
set /p Errmsg=<%temp%\err.tmp 
03.
echo  %time%: %%f - !Errmsg! ErrorLevel !ERRORLEVEL!>>Domäne_LOG.txt  
04.
 
05.
rem ALTE ZEILE echo  %time%: %%f - ErrorLevel !ERRORLEVEL!>>Domäne_LOG.txt  
06.
rem ALTE ZEILE type %temp%\err.tmp >>Domäne_LOG.txt
Wenn es läuft, kannst Du ja noch mal den </i>final code</i> hier am Stück posten.

Gruß
Biber
[Edit]
Vorhin überlesen:
achja und was bedeuted die "2" ->2>%temp%\err.tmp
Die "2" steht für den "Kanal", auf dem (Bildschirm-) Fehlermeldungen geschrieben werden.
Kanal 1 = STDOUT = alle normalen Status/Fortschrittsmeldungen-->geht auf CON = Bildschirm
Kanal 2 = STDERR = alle Fehlermeldungen --> geht auch auf CON = Bildschirm.

Aber pfiffigerweise kann/darf ich das trennen (wie oben vorgekaspert) und in verschiedene Ziele umlenken.
[/Edit]
Bitte warten ..
Mitglied: Rookie84
26.09.2006 um 13:47 Uhr
Danke funktioniert wieder.... der finale Code kommt sobal es fertig ist!

wieso zeigt es jetzt im Dos-Fenster eigtl nicht mehr an was es gerade ausführt?
es werden keinerlei fehlermeldungen mehr angezeigt und auch nicht, dass gerade die Systeminformationen ausgelesen werden!
Bsp. "Prozessorinformationen werden geladen...."

fand das ganz praktisch, wenn das im DOS-fenster während des Programmdurchlaufs angezeigt wird...

ich meine dabei nicht, dass die ganzen BEfehle im DOS-FEsnter stehen... dies wird ja durch das echo off ausgeschalten...
Bitte warten ..
Mitglied: Biber
26.09.2006 um 14:28 Uhr
wieso zeigt es jetzt im Dos-Fenster eigtl nicht mehr an was es gerade ausführt?

Das ist die so genannte künstliche Intelligenz des M$-CMD-Interpreters... ab einer gewissen Ausgereiftheit einer Batchdatei geht der Interpreter davon aus, dass Du Bildschirmmeldungen selbst definieren kannst...

Nein, im Ernst: die Meldungen sind (fast alle) irgendwohin umgeleitet oder unterdrückt worden.
Aber niemand hindert Dich, zusätzlich noch eine Zeile rauszudrücken:
echo Systeminformationen von Rechner [...bla..] werden gelesen...
-oder-
title Systeminformationen von Rechner [...bla..] werden gelesen...
...

Können wir den Beitrag jetzt mal als "gelöst" markieren, bevor noch weiter dran rumfeilst ...?


Gruß
Biber
Bitte warten ..
Mitglied: Rookie84
26.09.2006 um 14:44 Uhr
danke... habs mir fast gedacht, weil das plötzlich nicht mehr kam, obwohl ich nur eine Zeile hinzugefügt habe!

hab den grünen haken gesetzt...-> Beitrag gelöst, eigtl schon nach deiner ersten Antwort, aber...

der versprochene finalcode kommt sobald ich endgültig fertig bin!

nochmal vielen DANK!
Bitte warten ..
Mitglied: Biber
26.09.2006 um 15:39 Uhr
Tja, rookie84,
.. kommt sobald ich endgültig fertig bin...
Lieber, wenn der Batch endgültig fertig ist - das geht schneller

Danke schon fürs Endergebnis (die so genannte "v0.96b") *feix*

Biber
Bitte warten ..
Mitglied: Rookie84
27.09.2006 um 08:45 Uhr
Finaler Code (v0.96b ):

01.
date/t >Domäne_Server.txt 
02.
date/t >Domäne_Log.txt 
03.
 
04.
@echo off & setlocal EnableDelayedExpansion 
05.
FOR /f %%f IN (computer_domäne.txt) DO ( 
06.
 
07.
  (systeminfo /S %%f /U domäne\user /P * /FO CSV /NH >%temp%\thisinfo.tmp 2>%temp%\err.tmp) 
08.
  
09.
   if !errorlevel! GEQ 1 ( 
10.
   set /p Errmsg=<%temp%\err.tmp 
11.
   echo %%f; !Errmsg!>>Domäne_Log.txt  
12.
 
13.
   ) ELSE ( 
14.
    type %temp%\thisinfo.tmp>>Domäne_Server.txt 
15.
16.
   )
Nochmals vielen DANK
Bitte warten ..
Mitglied: Biber
27.09.2006 um 09:27 Uhr
Gern geschehen, Rookie.

Ich setze diesen Beitrag guten Gewissens auf "Geschlossen".

Grüße
Biber
[Edit: Uupps, nanu... kann ich gar nicht - der ist gar nicht mehr im Bereich "Batch & Shell"]
Bitte warten ..
Mitglied: Rookie84
27.09.2006 um 11:06 Uhr
er ist doch noch unter Batch & Shell! oder kann ich den beitrag auch schließen?
Bitte warten ..
Mitglied: Biber
27.09.2006 um 20:16 Uhr
er ist doch noch unter Batch & Shell! oder kann ich den beitrag auch schließen?

Nein, er ist wieder unter Batch & Shell.
Da war wohl in den letzten zwei Tagen ein kleiner Bug unterwegs, der zu einigen Beiträgen führte, die keinem Bereich zugeordnet waren...
Und Dein Beitrag hing plötzlich auch ohne Zuordnung zu einem Bereich hier rum (ja, ich weiß, angelegt hattest Du ihn unter Batch & Shell, aber vorhin war er im Nirwana...)

Das hat unser Webmaster Frank vorhin gefixt und Deinen Beitrag auch zurückverschoben/neu zugeordnet.

...und jetzt kann ich dat Dingen auch schließen.
Gruß
Biber
Ob einen "Beitrag schließen" auch der Ersteller machen kann oder nur der Moderator des Teil-Zweigs.....??
....das weiß ich nicht, da ich noch nie in einem Bereich einen Beitrag eröffnet habe, wo ich nicht auch Moderator bin.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
For-Schleife Bedingung "nicht erfüllt" abfragen
Frage von BatchNeulingBatch & Shell8 Kommentare

Hallo zusammen, dieses Forum hat mir schon des öteren weiter geholfen. Leider finde ich auch nach intensiver Suche noch ...

Batch & Shell
Problem mit kombination aus IF ELSE und FOR Schleife.
gelöst Frage von UragusBatch & Shell12 Kommentare

Hallo, An sich möchte ich ein Script schreiben was eine DFSR-Replikation prüfen soll. Mit Batch Scripten habe ich leider ...

Batch & Shell
Powershell - if Bedingung
gelöst Frage von pps4535Batch & Shell4 Kommentare

Moin, moin, ich dachte ich mal einen neuen Thread auf, damit es geordnet abläuft :-) Hier habe ich schon ...

C und C++
C if bedingung
gelöst Frage von MarabuntaC und C++1 Kommentar

Hallo, ich kann zwar kein C, habe aber trotzdem eine Frage: Was wird in der "if bedingung" alles geprüft ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 37 MinutenVerschlüsselung & Zertifikate

Interessant SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...