IP-Adresse per Batch auslesen
Und ewig grüßt das Murmeltier...
Das alte Thema "Wie ermittle ich die IP-Adresse meines Rechners in einem Batchskript". Das Thema wurde hier schon mal behandelt und als "gelöst" gekennzeichnet. Allerdings bin ich mit der auf dem Befehl
Denn
Lange Rede, kurzer Sinn, here it is:
Noch schneller geht es mit dieser Variante:
Ist zwar eine sehr lange, aber dennoch eine einzige Zeile. (Wer diese Zeile in einer Batchdatei verwenden möchte, sollte nicht vergessen alle Vokommen von
Erklärung:
in der Ausgabe des Befehls
Ein alternativer Weg wäre es, die Indexnummer aus
Noch einfacher geht es mit dem Tool "Swiss File Knife". Da bekommt man mit
Wenn ihr bessere oder vergleichbare Lösungen habt, bitte teilt euer Wissen mit uns.
Schöne Grüße
Eugen
Das alte Thema "Wie ermittle ich die IP-Adresse meines Rechners in einem Batchskript". Das Thema wurde hier schon mal behandelt und als "gelöst" gekennzeichnet. Allerdings bin ich mit der auf dem Befehl
ipconfig
beruhenden Lösung nicht so ganz zufrieden.Denn
ipconfig
gibt immer Informationen über alle Netzwerkadapter aus. Hat man z.B. zusätzlich zum LAN-Adapter noch eine WLAN-Karte und/oder ein virtuelles Netzwerk (wie z.B. das Host-Only-Network von der Virtualbox) wird die Sache schnell unübersichtlich, mann muss zusätzliche Kontrollmechanismen (wie z.B. einen Zähler) einbauen usw. Sonst bekommt man immer die letztgenannte IP-Adresse, die nicht unbedingt die richtige sein muss. Und das Konzept mit dem Zähler ist auch noch davon abhängig, in welcher Reihenfolge die einzelnen Netzwerkadapter ausgegeben werden, was sich aber von Rechner zu Rechner unterscheiden kann.Lange Rede, kurzer Sinn, here it is:
FOR /F "tokens=3,5" %a in ('netsh interface ipv4 show route') do @IF '%a'=='0' FOR /F "tokens=2" %A in ('netsh interface ipv4 show addresses %b ^| find "IP-Ad"') do @echo IP: %A
FOR /F "tokens=5" %a in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @FOR /F "tokens=2" %A in ('netsh interface ipv4 show addresses %a ^| find "IP-Ad"') do @echo IP: %A
Ist zwar eine sehr lange, aber dennoch eine einzige Zeile. (Wer diese Zeile in einer Batchdatei verwenden möchte, sollte nicht vergessen alle Vokommen von
%x
zu %%x
zu erweitern.)Erklärung:
in der Ausgabe des Befehls
netsh interface ipv4 show route
steht an erster Stelle in der Spalte Idx
der Index des richtigen Netzwerkadapters. Diesen greifen wir uns und bekommen dann mit netsh interface ipv4 show addresses <index>
die IP-Konfi für den Netzwerkadapter mit der gegebenen Indexnummer. (Ohne die Angabe der Indexnummer ist die Ausgabe ähnlich wie bei ipconfig
.) Jetzt also nur noch nach dem passenden String filtern und die echo
-Ausgabe durch eine set
-Anweisung geeignet ersetzen. Finito.Ein alternativer Weg wäre es, die Indexnummer aus
netsh interface ipv4 show interfaces
herauszufiltern. Diese Methode hat sich allerdings als unzuverlässig entpuppt: ich habe Rechner gesehen, auf denen die Bezeichnung "LAN-Verbindung" dem bereits erwähnten virtuellen Netzwerk der Virtualbox gehörte, während die gesuchte Netzwerkkarte auf den Namen "Ethernet" gehört hat. Ist also wieder Rechner-abhängig. Da halte ich den Eintrag in der Routingtabelle, der die Metrik 0 hat, für zuverlässiger.Noch einfacher geht es mit dem Tool "Swiss File Knife". Da bekommt man mit
sfk.exe ip
sofort das, wonach man sucht. Die Sache hat aber zwei kleine Haken: a) mehr als die IP-Adresse erfährt man dabei auch nicht (d.h. keine Subnetzmaske) und b) auch wenn das Tool Freeware ist, geht man dabei über Bordmittel hinaus (ist nur so eine Prinzip-Sache).Wenn ihr bessere oder vergleichbare Lösungen habt, bitte teilt euer Wissen mit uns.
Schöne Grüße
Eugen
Please also mark the comments that contributed to the solution of the article
Content-ID: 203752
Url: https://administrator.de/contentid/203752
Printed on: October 10, 2024 at 01:10 o'clock
11 Comments
Latest comment
Hier ein VBS Script zum auslesen aus der WMI:
Einfach in ein Text file kopieren und ipauslesen.vbs nennen. dann im dos per kommando:
cscript c:\ipauslesen.vbs
starten.
[Edit Biber] Codeformatierung. [/Edit]
'#############################################################
' **************************************************
' * IP-Adressen und MAC-Adressen auflisten
' **************************************************
'On Error Resume Next
Set wmi = GetObject("winmgmts:")
' alle Instanzen finden, bei denen IPEnabled auf true gesetzt ist
wql = "select * from win32_NetworkAdapterConfiguration where IPEnabled=true"
Set configs = wmi.ExecQuery(wql)
For each config in configs
Set assoc = config.Associators_(,"Win32_NetworkAdapter",,,,,,,32)
' die zugehörige Win32_NetworkAdapter-Klasse finden
For each karte in assoc
Set adapter = karte
' gibt nur eine, also Schleife verlassen
exit For
Next
' Join macht aus einem Variablenfeld einen String
if instr(adapter.name, "Nortel") = 0 then
if config.DHCPEnabled = true then
DHCP = "Ja"
else
DHCP = "Nein"
end If
WScript.Echo adapter.name
WScript.Echo adapter.MACAddress
WScript.Echo Join(config.IPAddress, ",")
WScript.Echo config.DHCPServer
WScript.Echo DHCP
WScript.Echo config.DNSDomain
end if
Next
'#############################################################
cscript c:\ipauslesen.vbs
starten.
[Edit Biber] Codeformatierung. [/Edit]
Zitat von @format-c:
> Zitat von @ThePinky777:
> ...
> if instr(adapter.name, "Nortel") = 0 then
> ...
Hallo ThePinky777.
Verstehe ich es richtig, dass "Nortel" hier der Name des Herstellers des Netzwerkadapters ist? Falls ja, dann
müsste man für jeden Rechner, auf dem dieses Skript ausgeführt wird, zuerst erfahren, wie die Netzwerkkarte
heißt, wozu wiederum eine menschliche Interaktion erforderlich wäre. Gibt es da nicht irgendeinen Weg, das Skript
vollautomatisch arbeiten zu lassen?
Grüße
format-c
> Zitat von @ThePinky777:
> ...
> if instr(adapter.name, "Nortel") = 0 then
> ...
Hallo ThePinky777.
Verstehe ich es richtig, dass "Nortel" hier der Name des Herstellers des Netzwerkadapters ist? Falls ja, dann
müsste man für jeden Rechner, auf dem dieses Skript ausgeführt wird, zuerst erfahren, wie die Netzwerkkarte
heißt, wozu wiederum eine menschliche Interaktion erforderlich wäre. Gibt es da nicht irgendeinen Weg, das Skript
vollautomatisch arbeiten zu lassen?
Grüße
format-c
ne die Zeile sagt er soll "Nortel" Ausschließen.
Nortel ist ein anbieter von VPN verbindungen/treiber, sieht in der WMI aus wie ne netzwerkkarte ist aber nur eine Virtuelle, ergo uninteressant.
gibt vielleicht noch 1-2 weitere hersteller die man so ausschließen könnte wenns stört, z.B. Cisco AnyConnect oder so heißt einer. Wobei ich keine Ahnung hab wie dort dann die Netzwerkkarte heißt.
Aber du könntest das Script ja einfach mal starten dann siehst dus schon, das es geht
Das script lief ei 9000 Rechnern fehlerfrei, ergo denk ich wirds auch bei dir laufen
Aber ich gebs zu ist komisch gescriptet, ich häts auch anders gemacht kollegen halt
und wenn man die Daten speichern will in ne Datei hier ne Anleitung:
http://pc-know-how.g-websys.de/themen/004_vbs_script__inhalte_in_eine_d ...
Zitat von @LinWinx86:
Abend,
ca. tausendmal getestet mit Win XP, funktioniert ohne Probleme
> IPCONFIG | FINDSTR "IP-Adresse" >ip.tmp
> FOR /F "tokens=2,3,4 delims=:. " %%a IN (ip.tmp) DO SET SubNet=%%a.%%b.%%c
> DEL ip.tmp
Abend,
ca. tausendmal getestet mit Win XP, funktioniert ohne Probleme
> IPCONFIG | FINDSTR "IP-Adresse" >ip.tmp
> FOR /F "tokens=2,3,4 delims=:. " %%a IN (ip.tmp) DO SET SubNet=%%a.%%b.%%c
> DEL ip.tmp
jo funktioniert aber nur auf deutschem Betriebssystem, weil "IP-Adresse" als text gibts weder auf Englischem, Französischem, Spanischem und Schwedischen system, es reicht hierbei auch schon wenn ein anderer Language pack benutzt wird, das es nicht mehr geht.
daher kann man das script dann nur einsetzen wenn man das alles abfängt
wenn mans aus der WMI ausliest wie das VBS Script dann ist sprachversion wurst.