Ipconfig per findstr parsen und das Ergebnis richtig sortieren lassen
Angaben über Netzwerkadapter aus ipconfig /all
sollen sauber sortiert in ein log geschrieben werden.
Hallo,
eine Batch, an der ich aktuell arbeite, soll einen Teil von ipconfig per findstr rausfiltern und in ein Log schreiben.
Es klingt recht einfach, der Teufel steckt aber im Detail.
"besondere Umstände" :
- die Geräte (Notebooks und Desktops und Tablets) können entweder nur lan, wlan+Lan oder nur wlan haben.
- die Ausgabe sollte so sortiert sein, dass man erkennt, welches Gerät welche Mac, IP etc. hat.
- virtuelle Adapter sollen nicht ins log
- die Ausgabe kommt nicht so sortiert, wie ich es will (dazu unten mehr)
Die Frage ist nun, wie ich das alles lösen kann ohne mich zu verzetteln ...
Am Besten wäre es, wenn es eine Schleife gibt, die er durchgeht, um pro Durchgang nur einen Adapter als
Datensatz per findstr anzulegen.
Als Beispiel:
findstr "description" >> log
findstr "physical" >> log
findstr "DHCP Enabled" >> log
bisher bringt das hier (Beispiel: wlan und lan im notebook sind an)
lan-Adapter
wlan-Adapter
Mac 1
MAc 2
yes
yes
toll wäre natürlich:
Lan-Adapter:
Mac
dhcp an
wlan Adapter
mac
dhcp aus
Eine Idee wäre: wenn das script lan und wlan gefunden hat ( durch die Bezeichnung)
geht es in eine verschachtelte Schleife
if Ausgabe MAC= einmal erfolgt und Mac 2 wurde gefunden, gehe in Schleife 2
in Schleife 2 sagt er "wenn Mac einmal gefunden, weiter zu mac2, dann mac2 ausgeben und weiter bis zum Ende.
Danach muss er zum Ende springen, sonst frisst die Schleife noch die virtuellen Adapter und fügt zwar nicht die nuller-macs hinzu aber dafür dann die anderen Angaben, die eingelesen werden...
Problem daran: Das script ist für troubleshooting gedacht, es kann also sein, dass das Ende von Schleife 2 (sagen wir mal dns-servers) garnicht existiert oder weiß die Katz ... Mit errorlevel-Abfragen (wenn er z.B. keine mac im ganzen log findet, kann ich ein paar Sachen noch abfedern.
Die bisher einzige saubere Lösung wäre für mich alle Eventualitäten genau zu beschreiben und ihn dann sortieren zu lassen.
Das würde im Bestfall ewige Laufzeit und sehr viel Arbeit kosten ...
Oder ich würde versuchen, jeden Datensatz einzeln in ein eigenes log zu schreiben.
Man könnte dann mit if exist die Komponenten nacheinander in ein log reinschmieren.
Wenn noch jemand einen besseren Lösungsnsatz für mein Problem hätte, wäre ich sehr dankbar
meine batch sieht bisher noch so aus:
if not exist "%temp%\ipconf.txt" (ipconfig /all > "%temp%\ipconf.txt")
set Path="%temp%\ipconf.txt"
rem ja, path wird später per find and replace noch geändert ...
set Logdest="%userprofile%\Desktop\ipconf-parsed.txt"
findstr /C:"IP Routing Enabled" "%Path%" >> "%Logdest%"
findstr /C:"Ethernet adapter local" "%Path%" >> "%Logdest%"
findstr /C:"Wireless LAN" "%Path%" >> "%Logdest%"
findstr /C:"Media State" " "%Path%" >> "%Logdest%"
findstr /C:"Description" "%Path%" >> "%Logdest%"
findstr /V "00-00-00" "%Path%" |findstr Physical >> "%Logdest%"
findstr /c:"DHCP Enabled" "%Path%" >> "%Logdest%"
findstr /c:"DHCP Server" "%Path%" >> "%Logdest%"
findstr /c:"DNS Servers" "%Path%" >> "%Logdest%"
findstr /c:"Tunnel adapter" "%Path%" >> "%Logdest%"
findstr /c:"Default Gateway" "%Path%" >> "%Logdest%"
notepad %Logdest%
pause
sollen sauber sortiert in ein log geschrieben werden.
Hallo,
eine Batch, an der ich aktuell arbeite, soll einen Teil von ipconfig per findstr rausfiltern und in ein Log schreiben.
Es klingt recht einfach, der Teufel steckt aber im Detail.
"besondere Umstände" :
- die Geräte (Notebooks und Desktops und Tablets) können entweder nur lan, wlan+Lan oder nur wlan haben.
- die Ausgabe sollte so sortiert sein, dass man erkennt, welches Gerät welche Mac, IP etc. hat.
- virtuelle Adapter sollen nicht ins log
- die Ausgabe kommt nicht so sortiert, wie ich es will (dazu unten mehr)
Die Frage ist nun, wie ich das alles lösen kann ohne mich zu verzetteln ...
Am Besten wäre es, wenn es eine Schleife gibt, die er durchgeht, um pro Durchgang nur einen Adapter als
Datensatz per findstr anzulegen.
Als Beispiel:
findstr "description" >> log
findstr "physical" >> log
findstr "DHCP Enabled" >> log
bisher bringt das hier (Beispiel: wlan und lan im notebook sind an)
lan-Adapter
wlan-Adapter
Mac 1
MAc 2
yes
yes
toll wäre natürlich:
Lan-Adapter:
Mac
dhcp an
wlan Adapter
mac
dhcp aus
Eine Idee wäre: wenn das script lan und wlan gefunden hat ( durch die Bezeichnung)
geht es in eine verschachtelte Schleife
if Ausgabe MAC= einmal erfolgt und Mac 2 wurde gefunden, gehe in Schleife 2
in Schleife 2 sagt er "wenn Mac einmal gefunden, weiter zu mac2, dann mac2 ausgeben und weiter bis zum Ende.
Danach muss er zum Ende springen, sonst frisst die Schleife noch die virtuellen Adapter und fügt zwar nicht die nuller-macs hinzu aber dafür dann die anderen Angaben, die eingelesen werden...
Problem daran: Das script ist für troubleshooting gedacht, es kann also sein, dass das Ende von Schleife 2 (sagen wir mal dns-servers) garnicht existiert oder weiß die Katz ... Mit errorlevel-Abfragen (wenn er z.B. keine mac im ganzen log findet, kann ich ein paar Sachen noch abfedern.
Die bisher einzige saubere Lösung wäre für mich alle Eventualitäten genau zu beschreiben und ihn dann sortieren zu lassen.
Das würde im Bestfall ewige Laufzeit und sehr viel Arbeit kosten ...
Oder ich würde versuchen, jeden Datensatz einzeln in ein eigenes log zu schreiben.
Man könnte dann mit if exist die Komponenten nacheinander in ein log reinschmieren.
Wenn noch jemand einen besseren Lösungsnsatz für mein Problem hätte, wäre ich sehr dankbar
meine batch sieht bisher noch so aus:
if not exist "%temp%\ipconf.txt" (ipconfig /all > "%temp%\ipconf.txt")
set Path="%temp%\ipconf.txt"
rem ja, path wird später per find and replace noch geändert ...
set Logdest="%userprofile%\Desktop\ipconf-parsed.txt"
findstr /C:"IP Routing Enabled" "%Path%" >> "%Logdest%"
findstr /C:"Ethernet adapter local" "%Path%" >> "%Logdest%"
findstr /C:"Wireless LAN" "%Path%" >> "%Logdest%"
findstr /C:"Media State" " "%Path%" >> "%Logdest%"
findstr /C:"Description" "%Path%" >> "%Logdest%"
findstr /V "00-00-00" "%Path%" |findstr Physical >> "%Logdest%"
findstr /c:"DHCP Enabled" "%Path%" >> "%Logdest%"
findstr /c:"DHCP Server" "%Path%" >> "%Logdest%"
findstr /c:"DNS Servers" "%Path%" >> "%Logdest%"
findstr /c:"Tunnel adapter" "%Path%" >> "%Logdest%"
findstr /c:"Default Gateway" "%Path%" >> "%Logdest%"
notepad %Logdest%
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192822
Url: https://administrator.de/contentid/192822
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
zusätzlich zu Bastlas %path% ist
keine "schlechte" Idee (in dem Sinn, den Bastla meint), sondern mea culpa grober Unfug - mit set /a kann man mit Zahlen "rechnen", oder genauer die Variable "muß" eine ziffernkombination (incl. der für Grundrechenarten erlaubten Sonderzeichen) sein.
"leider dürfen "nur" User mit Adminrechten "wmic" benutzen.
Wenns nicht selbstgeschrieben sein muß und 3rd Party Werkzeuge erlaubt sind - hier muß es irgendwo eine Anleitung zum Programm BGinfo geben, das ohne Adminrechte und "installation" läuft und deine Zwecke "locker" erfüllt.
Gruß
edit
@ Bastla: Echt? siehste mal, wie du mir fehlst... Ich hab das nie probiert - auch komplett ohne rechtsklick als Admin?
Probier ich morgen gleich mal aus
/edit
zusätzlich zu Bastlas %path% ist
set /a Logdest="%userprofile%\Desktop\ipconf-parsed.txt"
keine "schlechte" Idee (in dem Sinn, den Bastla meint), sondern mea culpa grober Unfug - mit set /a kann man mit Zahlen "rechnen", oder genauer die Variable "muß" eine ziffernkombination (incl. der für Grundrechenarten erlaubten Sonderzeichen) sein.
"leider dürfen "nur" User mit Adminrechten "wmic" benutzen.
Wenns nicht selbstgeschrieben sein muß und 3rd Party Werkzeuge erlaubt sind - hier muß es irgendwo eine Anleitung zum Programm BGinfo geben, das ohne Adminrechte und "installation" läuft und deine Zwecke "locker" erfüllt.
Gruß
edit
@ Bastla: Echt? siehste mal, wie du mir fehlst... Ich hab das nie probiert - auch komplett ohne rechtsklick als Admin?
Probier ich morgen gleich mal aus
/edit
@ Rambo
Hinsichtlich des "
Grüße
bastla
"leider dürfen "nur" User mit Adminrechten "wmic" benutzen.
Abgesehen davon, dass Troubleshooting ohne Adminrechte in Bezug auf die Netzwerkeinstellungen sowieso eher mühsam werden dürfte , sind unter W7 keine Adminrechte mehr für "wmic
" erforderlich ...Hinsichtlich des "
set /a
" bin ich aber ganz bei Dir. Grüße
bastla
moin,
Das mit der schöneren Auflistung liese sich eventuell so in der CMD-Line lösen: (> ist mein Prompt)
Gruß Phil
Das mit der schöneren Auflistung liese sich eventuell so in der CMD-Line lösen: (> ist mein Prompt)
> (for /f "tokens=1,*delims=:" %h in (' ipconfig /all ') do @for /f "tokens=2,3 delims=:" %k in (": :%h:%i") do @if "%l" equ "" (set "ADapter=%h") else for /f "tokens=*" %a in ("%h") do @set "D=%a" &cmd /von /c "echo !Adapter!:!D:.^ ^=!:%i")>datei && find " LAN-Verbindung:" <Datei
Gruß Phil