Anzeige

Am Puls von Microsoft

Anzeige

Frage IP-Adresse auslesen und als Variable in Batch-Datei verarbeiten.

Status
Für weitere Antworten geschlossen.

edv.kleini

Win11 Registry-Fummler
Hallo

Und ganz speziell @skorpion68

Vielleicht kannst Du mir ja weiter helfen.

Das Resultat sind immer zwei Zeilen zu jedem reg query Befehl.
In der ersten Zeile steht dann der richtige Wert.
In der 2. Zeile steht logischerweise, wenn der Eintrag gefunden wird, eine 1.
Tokens steht ja auf Spalte 3.


@echo off
cls
SETLOCAL EnableDelayedExpansion


for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DefaultGateway"') do echo Router IP-Adresse=%%a

rem for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DefaultGateway"') do echo SET Router=%%a


for /f "tokens=3" %%b in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "SubnetMask"') do echo Subnetzmaske=%%b

for /f "tokens=3" %%c in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "IPAddress"') do echo Netztwerkkarten-IP-Adresse=%%c

rem echo Die IP-Adresse Ihres Router lautet: %router%

pause

Mit ipconfig geht es nur bei angeschlossenem Netzwerkkabel.

Das ist aber nicht immer erwünscht!

Vielleicht kriegst Du das ja hin, dass ich das für jede Zeile in je eine Variable bekomme und weiter verwursten kann!
 
Anzeige
Das Resultat sind immer zwei Zeilen zu jedem reg query Befehl.
Vielleicht auf deinem Rechner.
Meine Ausgabe sieht z.B. so aus:
Router IP-Adresse=10.10.10.1
Router IP-Adresse=3
Subnetzmaske=255.255.255.0
Subnetzmaske=0.0.0.0
Subnetzmaske=3
Netzwerkkarten-IP-Adresse=10.10.10.5
Netzwerkkarten-IP-Adresse=0.0.0.0
Netzwerkkarten-IP-Adresse=3
Und damit hättest du bei mir gerade mal die IP eines virtuellen VPN-Adapters ausgelesen, der nicht einmal aktiv sein muss.

Am Rande: bei Nutzung von DHCP läuft der Schlüsselwert "DefaultGateway" ins Leere, da dann die gesuchte IP unter "DHCPDefaultGateway" eingetragen wird.

Unabhängig davon dürfte ein PowerShell-Script dir deutlich mehr Möglichkeiten als ein Batch-Script auf der doch schon in die Jahre gekommene Command-Shell anbieten. Zumal dort neben WMI auch das .NET-Framework nutzbar ist. (Und je nach Einsatzbereich ist es u.U. sogar sinnvoll, wenn das Script digital signiert ist - was mit Batch schlicht nicht geht. Z.B. in einer Windows-Server-Umgebung mit ziemlich strikten Vorgaben, welche Codes ausgeführt werden dürfen. Da kommt man ohne Signatur mit gültigem Zertifikat nicht sonderlich weit.)

WMI-Beispiel:
Code:
Get-Wmiobject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true"
Listet dir sämtliche aktiven Netzwerkadapter sowie (in einem Array) alle IP-Adressen und Gateways.
Via Piping kann der Rückgabewert dann auf relevante Werte begrenzt werden.
Code:
Get-Wmiobject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true" | Select-Object -ExpandProperty  IPAddress
Listet nur noch die IP-Adressen auf.
WMI geht recht fix, ist jedoch sehr geschwätzig. Um da an die gewünschten Informationen zu kommen, muss man schon ein wenig mit Filtern und Verkettungen tricksen.

.NET-Beispiel:
Get-NetAdapter liest die vorhandenen Netzwerkkarten aus (Es wird ein Object gelesen, was als Array verarbeitet werden kann.)
Get-NetIPAddress liest sämtliche IP-Adressen inkl. den zugehörigen Netzwerk-Interfaces und den Interface-Indexes aus. (Auch hier wieder ein Object, was als Array weiterverarbeitet werden kann.)
Den Interface-Index kann man z.B. nutzen, um die IP-Adresse eines bestimmten Netzwerk-Interfaces auszulesen. Direkt an eine Variable übergeben und auf IPv4 begrenzt kann das z.B. so aussehen
Code:
$privateIP = $(Get-NetIPAddress -InterfaceIndex 13 -AddressFamily IPv4).IPAddress
Hier wird die IPv4 des Netzwerk-Interfaces mit dem Index 13 gelesen und in der Variablen $privateIP gespeichert. In diesem Fall wird nicht ein Object als Array gelesen, sondern direkt ein Wert aus dem entsprechenden Object-Property geholt.
.NET Ist nicht ganz so schnell wie WMI, dafür noch geschwätziger und mit der Möglichkeit, direkt auf die Object-Properties zuzugreifen.
 
Also... Ein bisschen weiter bin ich jetzt schon gekommen.

@echo off
cls
SETLOCAL EnableDelayedExpansion


for /f "Tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DefaultGateway"') do echo %%a
pause



set useexpression1=reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"
for /F "tokens=*" %%k IN ('%useexpression1%') do Set Gateway=%%k
rem set useexpression2=reg query "%gateway%"
for /f "Tokens=3" %%a in ('reg query "%GATEWAY%" /V "DefaultGateway"') do set Router=%%a
for /f "Tokens=3" %%a in ('reg query "%GATEWAY%" /V "Subnetmask"') do set Subnetzmaske=%%a
for /f "Tokens=3" %%a in ('reg query "%GATEWAY%" /V "IPAddress"') do set IP-Adresse=%%a
cls
echo.
echo Die LAN IP-Adresse des PCs lautet: %IP-Adresse%.
echo.
echo Die IP-Adresse des Routers lautet: %router%.
echo.
echo Der Wert der Subnetzmaske lautet %Subnetzmaske%.
echo.
pause

Bei dieser Befehlsfolge holt er sich den Wert aus dem letzten
Interfaces-Eintrag in geschweiften Klammern.
Wenn der Wert von "Prozent Gateway Prozent"
der letzte unter dem Registrypfad Interfaces ist, dann funktioniert die
Befehlskette ohne Probleme.
Ich muss also nur noch rausfinden, wie ich den Wert der geschweiften Klammer
in der sich bei meinen Lan-gebundenen PCs der Wert Subnetmask oder IP-Address
oder DefaultGatway befinden in eine Variable bekomme.
Somit schließe ich die anderen geschweiften Klammern aus.
In den Registrypfaden steht nämlich bei mir keiner der drei genannten Werte drin.

Mit anderen Worten:
Erst mal muss aufgebröselt werden in welchem Registrypfad unterhalb von
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
steht was von SubnetMask oder Defaultgateway oder IPAddress und setzte das
dann als Wert für eine Variable ein.
 
Zuletzt bearbeitet:
Vielleicht kannst Du mir ja weiter helfen.
Schaue bitte mal wie folgt:

Code:
@echo off
cls
SETLOCAL EnableDelayedExpansion

for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DefaultGateway"^|findstr "DefaultGateway"') do echo Router IP-Adresse=%%a

rem for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DefaultGateway"^|findstr "DefaultGateway"') do SET Router=%%a

for /f "tokens=3" %%b in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "SubnetMask"^|findstr "SubnetMask"') do echo Subnetzmaske=%%b

for /f "tokens=3" %%c in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "IPAddress"^|findstr "IPAddress"') do echo Netztwerkkarten-IP-Adresse=%%c

rem echo Die IP-Adresse Ihres Router lautet: %router%

pause

Am Rande: bei Nutzung von DHCP läuft der Schlüsselwert "DefaultGateway" ins Leere, da dann die gesuchte IP unter "DHCPDefaultGateway" eingetragen wird.
Beachte ich aber dies dann wie folgt:

Code:
@echo off
cls
SETLOCAL EnableDelayedExpansion

for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DhcpDefaultGateway"^|findstr "DhcpDefaultGateway"') do echo Router IP-Adresse=%%a

rem for /f "Tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "DhcpDefaultGateway"^|findstr "DhcpDefaultGateway"') do SET Router=%%a

for /f "tokens=3" %%b in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "*DhcpSubnetMask"^|findstr "DhcpSubnetMask"') do echo Subnetzmaske=%%b

for /f "tokens=3" %%c in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" /S /V "*DhcpIPAddress"^|findstr "DhcpIPAddress"') do echo Netztwerkkarten-IP-Adresse=%%c

rem echo Die IP-Adresse Ihres Router lautet: %router%

pause
 
Ich sachchchchch :ROFLMAO: doch, Du bist unbezahlbar. @skorpion68

Det mit dem findstr das kenne ich ja, aber auf so was komme ich mmer zuletzt!

Ein etwas anderer Lösungvorschlag von mir geht über den ntsh Befehl...

@echo off
cls
setlocal EnableDelayedExpansion
for /f "delims=" %%a in ('"net config workstation |findstr /B /C:"Arbeitsstationsdom„ne""') do set "domaine=%%a"
for /F "tokens=2,3 delims= " %%b in ("%domaine%") do set "Meinedomaene=%%b"
for /f "delims=" %%a in ('"netsh interface ipv4 show config Ethernet |findstr /C:"Standardgateway""') do set gateway=%%a
for /F "tokens=2,3 delims= " %%b in ("%gateway%") do set "meinstandardgateway=%%b"
for /f "delims=" %%a in ('"netsh interface ipv4 show config Ethernet |findstr /C:"IP-Adresse""') do set ipadresse1=%%a
for /F "tokens=2,3 delims= " %%b in ("%ipadresse1%") do set "meineipadresse=%%b"
for /f "delims=" %%a in ('"netsh interface ipv4 show config Ethernet |findstr /C:"Subnetzpr„fix""') do set subnetmask1=%%a
for /F "tokens=2 delims=4" %%b in ("%subnetmask1%") do set "subnetzmaske21=%%b"
echo.
echo Die IP v4 Netzwerkadresse dieses Computers lautet: %meineipadresse%
echo.
echo Der Standardgateway ist: %meinstandardgateway%
echo.
echo Die Subnetzmaske lautet: %subnetzmaske21%.
echo.
echo Der Name der Arbeitsgruppe lautet: %Meinedomaene%
echo.
pause

Da aber hapert es noch ein bisschen an der Subnetzmaske.

Wichtig: Meine Batchdateien müssen immer im Ansiformat gespeichert werden!
Zu beachten ist die Zeile:

for /f "delims=" %%a in ('"net config workstation |findstr /B /C:"Arbeitsstationsdom„ne""') do set "domaine=%%a"

Arbeitsstationsdomäne ist mit dem Sonderzeichen "Anführungszeichen unten (fett)" versehen.
 
Zuletzt bearbeitet:
Damit ist das Ganze dann verwurstet:

Wer das hier haben will, im Anhang findet man eine ZIP-Datei.

Dort ist eine Batch-Datei drin, die mit Hilfe der Dateien
qres2.exe und psgetsid.exe (von Systinternals)
verschiedenste Informationen zum Computer abfragt.
Zum Ausführen der Dateien sind administrative Rechte erforderlich.
Einfach die Dateien in irgendeinem Ordner entpacken und die Batchdatei ausführen.
Geschehen tut da nix Grosses, denn es werden nur Werte abgefragt und keine Werte verändert!
Weder im Betriebssystem auf Laufwerksebene noch was Schlimmes in der Registry!

Damit kann das Thema als gelöst markiert werden!

Gemeinschaftswerk von @edv.kleini und @skorpion68 (Danke Dir nochmals!)

Geballte_Systeminformationen.PNG



Um aber auch hier den Forenregeln genüge zu tun, extra eine Warnung:

Eine Veränderung der Registry kann das Betriebssystem unbrauchbar machen!!!
 

Anhänge

  • PC_INFOS_gesammelt.zip
    143,4 KB · Aufrufe: 113
@edv.kleini
Funktioniert bei mir am Arbeitsrechner nicht...
User-ID wird nicht ausgelesen (verm. wg. Domänenuser?), IP-Adressen nimmt er die von Virtualbox-Adapter, QRes2.exe wird sofort vom Virenscanner gefressen (CylanceProtect), somit keine Auflösung.
 
funktioniert bei mir auch nicht und ich kann da auch nicht so wirklich den Sinn dahinter erkennen

wenn ich in dieser Art mal was sehen will geb ich in der Eingabeaufforderung ipconfig -all ein und gut
 
So
Dann wollen wir mal ab bisserl was klar stellen.
Das DOS-Fenster Programm ist
1. nicht in der Lage zu erkennen, ob man in einer Domäne ist oder nicht.
Es funktioniert nicht im Zusammenhang mit von einem DHCP-Server
vergebenen IP-Adressen, sondern eben nur bei statischen IP-Adressen.
Auch das hatte Skorpion68 hier bereits erwähnt.
Aber wenn man die Beiträge eben nur überfliegt und nicht komplett durchliest....
2. nur dazu gedacht auf einem normalen Standard-PC zu funktionieren.
Des Weiteren
Ob Sinn oder Unsinn darum geht es mir nicht. Ich habe mir eine Programmierhilfe von
Skorpion68 erwartet und die dankenswerter Weise auch erhalten.
IPconfig ist nicht unbekannt. Ich bin auch schon seit 1979 in der Branche tätig!
Nur erreiche ich mit ipconfig nicht 100%ig genau die selben Resultate, bei der Auswertung
und deren Anzeige, wie in dem kleinen DOS-Programm.


Die Qres2.exe habe ich eben über Virus Total Homepage gejagt.

Diese 2 im Bild genannten Virenscanner schlagen manchmal sogar bei ´ner simplen Text-Datei an.
Alle anderen Virenscanner (66 von 68) haben gesagt da is nichts.

Wenn man natürlich genau diesen Virenscanner nutzt, hat man schlechte Karten.
Trotzdem gehe ich mal davon aus, dass die 5 KB grosse EXE-Datei Virenfrei ist!

qres2_1.png




Um den Forenregeln aber genüge zu tun:

Im Anhang eine qres.exe die Virustotal gerade als frei gemeldet hat
Auf allen 68 Virenscannern!

qres2_1.png
 

Anhänge

  • PC_INFOS_gesammelt.zip
    143,4 KB · Aufrufe: 52
Zuletzt bearbeitet:
Da kann man es mal wieder sehen, wie überempfindlich manche Virenscanner reagieren.
Ich habe die Dateien qres2.exe aus Beitrag 6 und Beitrag 9 mit einander verglichen.
Entfernt man den Schriftzug "Copyright (C) Anders Kjersem" aus der Datei und ersetzt
diesen z.B. durch Leerzeichen oder NOPs mit einem Programm wie edit pad pro, dann
schreien mich 2 Virenscanner an "Software ist unsafe bzw. malicious". wie in Beitrag 9 im Bild zu sehen.
Ansonsten waren keine Unterschiede fest zu stellen.
Sehr schön kann man beide Dateien mit der fc.exe im DOS-Fenster vergleichen.

qres_Bild.PNG
 
Zuletzt bearbeitet:
@rusticarlo
Nicht immer ist nur allein das Resultat das Ziel sondern in diesem Fall und ausschließlich:
DER WEG.

Siehe es mal so:
Ich versuche mit möglichst konventionellen Mitteln ein mir gestecktes Ziel zu erreichen.
Sicher gibt es da auch einfachere Wege, aber dann siehe Zeile 2 und 3.

@Lajoe
Ich probiere gerade noch mit der whoami.exe /user im DOS-Fenster rum.
Siehe Dateianhang...
Ist nur ´ne gezippte Batchdatei.

Kannst ja mal hier posten, was in der Domäne bei Eingabe im DOS-Fenster bei Dir passiert.
Die Whoami.exe ist übrigens immer noch Bestandteil von Windows.
Nach der von mir ja hier schon in einem anderen Thread geplanten Ausdünnung des Betriebssystems
ist halt fraglich, wie lange uns solche kleinen Tools wie ipconfig oder whoami noch erhalten bleiben.

 

Anhänge

  • Computernamen_abfragen_2a.zip
    552 Bytes · Aufrufe: 58
Zuletzt bearbeitet:
Und wenn das Windows dann eine andere Sprachversion hat, fliegt einem all sowas so richtig um die Ohren. ;)

Als Bordmittel ist seit Jahren Powershell da. Wenn man gerne rumscriptet, ist das wirklich das empfehlenswerte und mittlerweile auch "konventionelle" Mittel der Wahl. Selbst wenn der Weg das Ziel ist. :)

Nebenbei wären da beide verwendeten Tools auch noch überflüssig und man würde die ganze Geschichte direkt rein scriptbasiert hinbekommen. Also sogar noch eher mit Bordmitteln, als die Batch-Lösung plus Tools.
 
Zum Einen sehe ich nicht ein, dass ich mich immer und immer wieder in diesem Forum rechtfertigen muss,
wie ich etwas für mich mache. Das ist immer noch meine Sache!
Ich habe zum Anderen deutlich gemacht,
dass skorpions ( @skorpion68 ) Hilfe benötigt wurde, mehr nicht.
Was andere User mit dem Download betreiben geht auf ihr eigenes Risiko.
Auch darauf habe ich hingewiesen.

Auch Powershell und die Nutzung davon sind mir nicht unbekannt.

Des Weiteren:


Kann mal bitte einer der Admins das Thema als geschlossen markieren...Danke.
 
Status
Für weitere Antworten geschlossen.
Anzeige
Oben