IP-Adresse per PowerShell Skript auslesen (Nur aktiven Netzwerkadapter anzeigen)?
Hallo,
Ich möchte ein PowerShell Skript schreiben, die unter anderem die IP-Adresse ausließt.
So sieht meine Lösung bis jetzt aus:
$Netzwerkadapter = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true
$ipadsresse = $Netzwerkadapter.IPAddress
Add-Content -Path $dateitxt -Value "IP-Adresse: $ipadsresse "
Das Problem ist, das er die IP-Adresse von den virtuellen Adaptern dahinter schreibt.
Gibt es da irgend eine Lösung nur die Daten von dem lokalen Adapter auszulesen?
Es geht um folgende Informationen (Adapternamen, IPv4-Adresse, Standardgateway, DNS- Server, DHCP-Server, Mac-Adresse und DHCP aktiviert [Ja oder Nein])
Danke im voraus ; )
3 Stimmen
2 Antworten
Dejavue... https://www.gutefrage.net/frage/ip-adresse-per-batch-datei-auslesen-virtuelle-adapter-ausschliessen
Die Abläufe sind die Gleichen...
Wir müssen den/die Physischen aussieben.
Dazu schauen wir ersmal einfach in der Powershellconsole welche CIMInstanzen und zum Thema Network zur Verfügung stehen:
Get-CimClass |Where {$_.CimClassName -like '*NetWork*'}
Für uns ist wieder relvant: Win32_NetworkAdapter und Win32_NetworkAdapterConfiguration
Wie auch in Batch sollte man sich die Struktur einer Kommandoausgabe anschauen:
Get-CimInstance -Class Win32_NetworkAdapter|Format-List *
Da ist auch wieder unser PhysicalAdapter, welcher den Unterschied macht:
Get-CimInstance -Class Win32_NetworkAdapter -Filter Get-CimInstance -Class Win32_NetworkAdapter -Filter "PhysicalAdapter=$true and NetEnabled=$true"|fl *
Wir nehmen uns wieder AdapterType, MACAddress, Name, Speed:
Get-CimInstance -Class Win32_NetworkAdapter -Filter "PhysicalAdapter=$true and NetEnabled=$true"|select -property AdapterType, MACAddress, Name, Speed
Jetzt kombinieren wir die ermittelten aktiven physischen Adapter mit der Anfrage auf die Win32_NetworkAdapterConfiguration. (kurze Version😏)
Get-CimInstance -Class Win32_NetworkAdapter -Filter "PhysicalAdapter=$true and NetEnabled=$true"|select -property AdapterType, MACAddress, Name, NetConnectionID, Speed|%{
$_
$MACFilterString = 'MACAddress="{0}"' -f $_.MACAddress #Filterstring basteln
Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter $MACFilterString |select -property DefaultIPGateway,DHCPEnabled,DHCPServer,DNSServerSearchOrder,IPAddress
}
pause
Die Ausgabe ist einfach ein Sammelsurium an Werten🤢🤮
Viel leichte lässt es sich arbeiten, wenn man alles schön zusammenführt.
$Netzwerkadapters = Get-CimInstance -Class Win32_NetworkAdapter -Filter "PhysicalAdapter=$true and NetEnabled=$true"|select -property AdapterType, MACAddress, Name, NetConnectionID, Speed
#für jeden gefundenen aktiven physischen Adapter
#für alle potenziellen Pysischen Adapter in dem Objectarray "$NetworkAdapterConfiguration" machen und in einer ObjectArray-Variable speichern
$MyPhysicalNetWorks = $Netzwerkadapters|Foreach-Object{
$MACFilterString = 'MACAddress="{0}"' -f $_.MACAddress #Filterstring basteln
#...und die ausgewählten Konfigwerte für den Adapter mit dem Filterstring abrufen und in Variable ablegen
$NetworkAdapterConfiguration = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter $MACFilterString |select -property DefaultIPGateway,DHCPEnabled,DHCPServer,DNSServerSearchOrder,IPAddress
$NetworkAdapterConfiguration|Foreach-Object{
#DefaultIPGateway, IPAddress, DNSServerSearchOrder sind ArrayOfStrings , welche wir erstmal zerlegen und einzelnen Objectvariablen zuweisen müssen
#am besten ein Neues Object bauen
$MyConfigObj = [PSCustomObject]@{
GatewayIPv4 = ($_.DefaultIPGateway[0])
GatewayIPv6 = $_.DefaultIPGateway[1]
IPv4 = $_.IPAddress[0]
VLIPv6 = $_.IPAddress[1]
tempIPv6 = $_.IPAddress[2]
IPv6 = $_.IPAddress[3]
DNSServer1 = $_.DNSServerSearchOrder[0]
DNSServer2 = $_.DNSServerSearchOrder[1]
DHCPServer = $_.DHCPServer
DHCPEnabled = $_.DHCPEnabled
}
}
#dem neu erstellten Objekt "$MyConfigObj" auch noch die übrigen Propertys des aktuellen Netzwerkadapters zuweisen (AdapterType, MACAddress, Name, Speed)
$Netadapter = $_ #Die ausgewählten Werte des aktuellen Netzwerkadapters in Object zwischenspeichern (brauchen wir um den Wert des Members zuzuweisen )
$Netadapter|Get-Member -MemberType NoteProperty -Force|Foreach-Object{
$MyConfigObj | Add-Member -MemberType NoteProperty -Name $_.Name -Value $Netadapter.($_.Name)
}
$MyConfigObj # ...und das Objekt in die Pipline schicken
}
'mal unser neues ObjektArray $MyNetPhysicalWorks anzeigen:'
$MyPhysicalNetWorks|fl *
# ein wenig hübsch anzeigen:
#für jedes Object in $MyNetPhysicalWorks (% alias Foreach-Object)
$MyPhysicalNetWorks|%{
Write-Host ('Verbindung = {0}' -f $_.NetConnectionID) -f black -b White
Write-Host ('AdapterType = {0}' -f $_.AdapterType) -Foreground Green
Write-Host ('Name = {0}' -f $_.Name) -Foreground Green
Write-Host ('MACAddress = {0}' -f $_.MACAddress) -Fo Green
Write-Host ('Geschwindigkeit = {0}' -f $_.Speed) -f Green
Write-Host ('IPv4-Adresse = {0}' -f $_.IPv4) -Fo Blue
Write-Host ('IPv6-Adresse = {0}' -f $_.IPv6) -F Blue
Write-Host ('Temp IPv6-Adresse = {0}' -f $_.tempIPv6) -Foreground Blue
Write-Host ('Verb.lokale IPv6 = {0}' -f $_.VLIPv6) -Foreground Blue
Write-Host ('Standardgateway = {0}' -f $_.GatewayIPv4) -Fo Red
Write-Host ('GateWay IPv6 = {0}' -f $_.GatewayIPv6) -Fo Red
Write-Host ('DHCP aktiv = {0}' -f $_.DHCPEnabled) -F Magenta
Write-Host ('DHCP Server = {0}' -f $_.DHCPServer) -F Magenta
Write-Host ('DNSServer 1 = {0}' -f $_.DNSServer1) -F Yellow
Write-Host ('DNSServer 2 = {0}' -f $_.DNSServer2) -F Yellow
''
}
pause
Das erstellen/zusammenführen von Objecten ist zwar schon etwas über Anfänger hinaus.... Powershell arbeitet aber nunmal mit Objekten und nicht mit Strings, wie Batch.
so sieht es bei zwei aktiven Adaptern aus:

dann guck dir doch mal an was in $Netzwerkadapter
steckt , wenn es da eine info gibt , dann kannst du ja gucken ob das wort virtuel drinne steckt .
Auch auf "TAP" kann man prüfen, das sind dann die virtuellen Adapter, die VPN-Software anlegt.
wenn du mal wenigstens googeln könntest
https://administrator.de/tutorial/systemdaten-auslesen-mit-powershell-7-0-558724.html
findet man doch sofort , einfach scrollen bis zu deiner zeile die du abfragst .
Function Get-NetworkInfo
Danke für die schnelle Antwort.
Wie kann ich mir alle werte von $Netzwerkadapter anzeigen lassen?