slaintemhath
Goto Top

Name der aktiven Netzwerkkarte(n) ermiteln

Umgebung: Active Directory, Windows 2000/XP/Vista Clients

Moin,

um eine globale Umstellung der DNS und WINS Einstellungen auf den Clients soll per netsh-Script zu realisieren, müsste ich den/die Namen der aktiven Netzwerkkarten per Batch ermitteln und in eine Datei oder Umgebungsvariable schreiben. Zusätzliche Utilities sollen nach Möglichkeit nicht verwendet werden.

Das Knifflige dabei ist: Die Clients sind in Deutsch, Englisch oder Tschechisch installiert - d.h. ein Parsen der ipconfig /all Ausgabe möchte ich vermeiden. Zusätzlich hat sicher auch der ein oder andere Spassvogel die Netzwerkverbindung umbenannt.

So stell ich mir das in etwa vor:
Get_NIC_Name.cmd > c:\NICs.txt
for /F %%a in (c:\NICs.txt) do call :SetParam "%%a"  
goto EOF

:SetParam 
netsh interface ip set dns name="%1" 10.4.10.3 static  
netsh interface ip set wins name="%1" 10.4.10.3 static  
goto EOF

Was mir also fehlt ist der Inhalt von "Get_NIC_Name.cmd" - irgendwelche ideen?

/EDIT

Die Lösung:
netsh interface show config | find """" > c:\NICs.txt  

lg,
Slainte

Content-Key: 121229

Url: https://administrator.de/contentid/121229

Printed on: April 19, 2024 at 07:04 o'clock

Member: Iwan
Iwan Jul 24, 2009 at 07:30:01 (UTC)
Goto Top
hallo,

ich habe nicht direkt eine Lösung, aber vielleicht einen Ansatz
in der Registry stehen unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}
die LAN-Verbindungen und in den jeweiligen Schlüsseln unter "Connection" existiert ein REG_SZ "Name"
dort steht dann z.B. "LAN-Verbindung" oder "Local Area Connection" drin
evtl. kannst du diese ja auslesen und dann diese in einer Datei speichern
Mitglied: 60730
60730 Jul 24, 2009 at 09:58:31 (UTC)
Goto Top
Servus,

*grübel*

netsh interface ip show config |find """"
ergebnis wäre bei mir /deutsch:
Konfiguration der Schnittstelle ""LAN-Verbindung""
auf dem englischen Server W2k3
Configuration for Interface "Name"

Ergo - solltest du "so" mit einem delims " den Namen finden können.

Wobei der Ansatz von Iwan auch was hat, denn alle Systeme haben doch die gleichen Nic und damit identische SIDs in der Reg?

Gruß

wobei der "Zufall" bei mir natürlich genau die Daten ausgespuckt hat, die ich oben eingepastet habe - deutsch ""Name"" - englisch "Name" ?*wtf*
Member: Iwan
Iwan Jul 24, 2009 at 10:15:34 (UTC)
Goto Top
@Timo
Laptop mit aktiviertem WLan, deutsches XP SP3:
C:\>netsh interface ip show config |find""""
Konfiguration der Schnittstelle ""LAN-Verbindung""
Konfiguration der Schnittstelle ""{766D7AAE-8A10-40A6-90B2-0326DE2C69AD}"" <- VPN
Konfiguration der Schnittstelle ""Drahtlose Netzwerkverbindung""
Laptop mit aktiviertem WLan, englisches XP SP3 mit deutschem MUI:
C:\>netsh interface ip show config |find""""
Konfiguration der Schnittstelle ""Local Area Connection""
Konfiguration der Schnittstelle ""{3437B271-148A-4EE6-B1A4-E687262CC4C9}"" <- VPN
Konfiguration der Schnittstelle ""Wireless Network Connection""
ich hab einen VBS-Schnipsel, der die Reg-Keys ausliest, um dann den Wert zu setzen, das das LAN-Icon in der Taskleiste gezeigt wird
das könnte ich sicherlich umschreiben, um ein Commadprompt zu öffnen, das dann die Werte setzt
evtl. kann man auch den Wert "IpCheckingEnabled" abfragen, da er scheinbar nur bei Netzwerkkarten vorhanden ist, die man auch Netzwerkverbindungen sieht
dann könnte man den Namen der Verbindung auslesen und per VBS an ein CMD-Prompt weitergeben

@autor
darf es denn auch VBS sein?
Member: SlainteMhath
SlainteMhath Jul 24, 2009 at 11:02:24 (UTC)
Goto Top
Hi,

@Timo
netsh interface ip show config |find """"
Danke - das macht genau das was ich brauche... war wohl zu naheliegend um selber drauf zukommen face-smile

@Iwan:
An deinem VBS Schnipsel wäre ich trotzdem interessiert face-smile

lg,
Slainte
Member: Iwan
Iwan Jul 24, 2009 at 11:14:55 (UTC)
Goto Top
erfolgreich getestet auf deutschem und englischem Win XP SP3:
Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."  
strCheckName = "IpCheckingEnabled"  
strValueName = "Name"  
Set WShell = CreateObject("WScript.Shell")  
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")  

strKeyPath = "SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"  
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
 
For Each subkey In arrSubKeys
   strRegKey = "SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\"  
   strKeyPath = strRegKey & subkey & "\Connection"  
   oReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strCheckName, strValue
   If strValue <> "" Then  
	oReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
	Wscript.Echo strValue
	BefehlDNS = "netsh interface ip set dns name=" & Chr(34) & strValue & Chr(34) &" addr=10.4.10.3 source=static register=PRIMARY"  
	BefehlWINS = "netsh interface ip set wins name=" & Chr(34) & strValue & Chr(34) & " addr=10.4.10.3 source=static"  
	'Wscript.Echo BefehlDNS  
	WShell.run BefehlDNS
	'Wscript.Echo BefehlWINS  
	WShell.run BefehlWINS 
   End If
Next
Wscript.Echo "Done!"  
Member: TorstenK
TorstenK Nov 13, 2009 at 09:59:27 (UTC)
Goto Top
Moin,

wunderbares Skript, tut genau das was ich gesucht habe...aber leider nur unter WindowsXP/2003 (Vista hab ich nicht getestet).

Irgendjemand eine Idee wie das Script unter Windows7 zum laufen zu bewegen ist?

Gruß

Torsten
Member: Iwan
Iwan Nov 13, 2009 at 10:45:51 (UTC)
Goto Top
hallo,

kommt eine Fehlermeldung oder was passiert?
leider habe ich kein Win7 hier, aber ich vermute mal, das die Einträge in der Registry anders aussehen oder der NETSH-Befehl anders aufgebaut ist

hier geht es weiter: Ermitteln des aktiven Netzwerkinterfaces
Member: DuRi98
DuRi98 Jul 08, 2017 at 14:12:31 (UTC)
Goto Top
Moin, ich weiß nicht ob ich zu spät bin, aber ich verrate dir eine Möglichkeit den Namen über Batch mittels wmic auszulesen.

 %SystemDrive%
for /f "tokens=2 delims==" %%I in (  
    'wmic nic where "Manufacturer!=\"Oracle Corporation\" and PhysicalAdapter=true and NetEnabled=True and Manufacturer!=\"VMWare, Inc.\""   
	get NetConnectionID /format:list 2^>NUL'  
) do set interface=%%I

echo Netzwerkadapter ist: %interface%
 

Oracle Corporation und VMWare Inc. umauszuschließen das ein virtueller Netzwerkadapter ausgelesen wird. Dies muss ggf. angepasst werden.