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)

Mitglied: Rookie84

Rookie84 (Level 1) - Jetzt verbinden

15.09.2006, aktualisiert 27.09.2006, 6843 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
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 ...

Windows 7
Batch IF Bedingung
gelöst Frage von JanSKIJWindows 73 Kommentare

Guten Morgen, seit mehreren Tagen versuche ich mich nun an meinem Script. Das meiste hab ich mir erfolgreich zusammen ...

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 ...

Datenbanken

FOR XML RAW mit IF Abfrage

gelöst Frage von Marcusg562Datenbanken1 Kommentar

Hallo zusammen, Customer DB Art Name Ort 1 Müller Ehingen 2 Fa. Gruber Braunsweiler 1 Meier Gelbhausen 1 Schmidt ...

Neue Wissensbeiträge
Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 4 StundenSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 3 TagenOff Topic14 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 3 TagenHumor (lol)3 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Windows 7

Updates zum Nachrüsten des SHA-2-Support für Windows 7 SP1, Windows Server 2008 (R2) und WSUS 3.0 SP2 sind da

Information von kgborn vor 4 TagenWindows 7

Wie bereits früher angekündigt (Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019) hat Microsoft die ...

Heiß diskutierte Inhalte
ISDN & Analoganschlüsse
Für was ist der Kasten direkt neben dem EVz59 zuständig?
Frage von Windows10GegnerISDN & Analoganschlüsse17 Kommentare

Hallo, im Schwarzwald habe ich folgendes Foto gemacht: Der Rechte Kasten ist der APL. So was ähnliches wie den ...

Cloud-Dienste
Remotedesktopverbindungen beeinflussen sich gegenseitig
gelöst Frage von Samy89Cloud-Dienste15 Kommentare

Moin, ich habe mehrere RDPs gleichzeitig laufen, auf denen jeweils ein Script via Powershell läuft. In diesem Prozess benutzt ...

DNS
Größere DNS Probleme nach zweitem DC. Eigentlich sollte es auch dadurch besser werden
Frage von TeWutzDNS12 Kommentare

Hallo zusammen, nachdem ich letzte Woche erfolgreich einen zweiten DC ) an den Start gebracht habe melden sich weiterhin ...

Notebook & Zubehör
Boot Manager erkennt keine Boot-Medien
Frage von nico2000Notebook & Zubehör11 Kommentare

Hallo, ich stehe gerade vor einem Problem an einem alten acer Notebook, welches ich neu aufsetzen wollte. Das Gerät ...