Es gibt bereits vorgefertigte cmdlets welches es ermöglichen die IPv4/v6 etc. zu betrachten. Jedoch sind diese nicht standardmäßig installiert.
Ich möchte hier eine einfache und rudimentäre Variante vorstellen mit der es möglich ist die IP, zugehörige MAC-Adresse sowie den Adapternamen zu ermitteln. Das Ganze kann anschließend gleich in ein Log geschrieben werden.
IP-Adresse ermitteln
Es gibt zwei einfache Möglichkeiten die IP des Clients zu ermitteln.
Test-Connection
Mittels des Clientname kann mit der Funktion Test-Connection die IP-Adresse ermittelt werden. Um den Clientnamen zu ermitteln gibt es die Umgebungsvariable (Environment) $env:COMPUTERNAME. Diese gibt den Namen des Clients wieder.
Zu beachten gilt, das hierbei nur die aktive IP-Adresse angezeigt wird. im Falle es gibt mehrere vergebene IPs durch parallele Nutzung eiens WLAN- und einem LAN-Anschluss.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$IPClient = Test-Connection $env:COMPUTERNAME -Count 1 #IPv4 $IPClient.IPV4Address.IPAddressToString #IPv6 $IPClient.IPV6Address.IPAddressToString <# Ausgabe #> #IPv4 # 192.168.1.1 #IPv6 # fe80::e6:bfe9:cc2c:7e1d%13 |
ipconfig
Die zweite Variante ist die klassische aus der CMD bekannte mittels ipconfig.
Mittels des Schalters /all werden alle Bereitgestellten Adapter mit den jeweiligen Einstellungen angezeigt. Hier bei ist es etwas mühselig herauszufinden wo die gesuchte IP-Adresse steht. Dennoch wird ipconfig die Basis dafür bilden alle Informationen gefiltert zu erhalten.
1 |
ipconfig /all |
MAC-Adresse ermitteln
Unter ipconfig /all ist die jeweilige MAC-Adresse zur IP-Adresse vermerkt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ipconfig /all # Auszug des Output # Ethernet-Adapter LAN-Verbindung: # Verbindungsspezifisches DNS-Suffix: # Beschreibung. . . . . . . . . . . : Intel(R) Ethernet Connection I219-LM # Physikalische Adresse . . . . . . : C8-5B-76-2B-28-7C # DHCP aktiviert. . . . . . . . . . : Nein # Autokonfiguration aktiviert . . . : Ja # IPv4-Adresse . . . . . . . . . . : 192.168.1.1(Bevorzugt) # Subnetzmaske . . . . . . . . . . : 255.255.255.0 # Standardgateway . . . . . . . . . : # NetBIOS ber TCP/IP . . . . . . . : Aktiviert |
Ausgabe der gewünschten Daten
Um nun zu ermitteln welche IPs aktuell für den Client vergeben sind, speichere ich die Ausgabe von ipconfig /all in einer Variable $IPRaw und analysiere diese zeilenweise. dabei habe ich versuch den Text auf sprachlich neutral gewählte Schlagwörter zu filtern. Die Schlagworte sind IPv4 und IPv6 sowie Phy, Phy steht hierbei für Physikalische Adresse und wird und die MAC-Adresse übergeben.
Script – Funktionsweise
Im Script wird die Variable $IPRaw Zeile für Zeile analysiert. Wird eine Überstimmung von „IPv4“ gefunden, wird der Text wieder rückwärtig nach dem Suchbegriff „Phy“ durchsucht um die MAC-Adresse zu ermitteln. Diese Informationen werden in den Hilfsvariablen $IPv4, $MAC, sowie $Adaptername zwischengespeichert und mittels Split(), Trim() und Replace() zurecht geschnitten. Siehe dazu PowerShell – 03.2 – Strings bearbeiten und untersuchen mit Funktionen wie Trim(), Substring(), Contains(), ToLower(), ToUpper(), StartsWith(), EndsWith()
Das Array $IPData kann hierbei ignoriert werden. Dieses dient für eine spätere Verwendung in anderen Scripten. Dazu ein anderes Mal mehr.
Script – IPv4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<# Name Get-IPv4 Beschreibung Ermittelt die IPv4, zugehörige MAC-Adresse sowie den Adapternamen Benötigt PowerShell 3.0 (Windows6.1-KB2506143-x64) Version, Datum, Beschreibung, Autor 1.0 | 23.01.2017 | Initiale Version | Stefan Rehwald 1.1 | 11.07.2017 | Clear-Variable hinzugefügt | Stefan Rehwald #> function Get-IPv4 () { $IPRaw = ipconfig /all $i=0 Foreach($Row in $IPRaw) { #Get IPv4 (all), MAC and Adaptername If($Row -like "*IPv4*") { #MAC $j=$i do { $j-- }while ($IPRaw[$j] -notlike "*Phy*") $v4_MAC = $IPRaw[$j].Trim() #Adaptername $j=$i do { $j-- }while ($IPRaw[$j] -notlike "") $v4_Adaptername = $IPRaw[$j-1] #Data $v4_IPv4 = $Row.Split(":")[1].trim() $v4_MAC = $v4_MAC.Split(":")[1].trim() $v4_Adaptername = $v4_Adaptername.Replace(":","") $IPData =@($v4_IPv4,$v4_MAC,$v4_Adaptername) #LOG Write-Host "$($v4_IPv4);$($v4_MAC);$($v4_Adaptername)" -F Green #Clearing Clear-Variable v4_* } $j=0 $i++ } } Get-Ipv4 <# Ausgabe #> # 172.29.0.241(Bevorzugt);E4-B3-18-E6-B1-58;Drahtlos-LAN-Adapter Drahtlosnetzwerkverbindung # 192.168.1.1(Bevorzugt);C8-5B-76-2B-28-7C;Ethernet-Adapter LAN-Verbindung |
Script – IPv6
Hier wurde lediglich die Suche von „*IPv4*“ auf „*IPv6*“ abgeändert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<# Name Get-IPv6 Beschreibung Ermittelt die IPv6, zugehörige MAC-Adresse sowie den Adapternamen Benötigt PowerShell 3.0 (Windows6.1-KB2506143-x64) Version, Datum, Beschreibung, Autor 1.0 | 23.01.2017 | Initiale Version | Stefan Rehwald 1.1 | 11.07.2017 | Clear-Variable hinzugefügt | Stefan Rehwald #> function Get-IPv6 () { $IPRaw = ipconfig /all $i=0 Foreach($Row in $IPRaw) { #Get IPv6 (all), MAC and Adaptername If($Row -like "*IPv6*") { #MAC $j=$i do { $j-- }while ($IPRaw[$j] -notlike "*Phy*") $v6_MAC = $IPRaw[$j].Trim() #Adaptername $j=$i do { $j-- }while ($IPRaw[$j] -notlike "") $v6_Adaptername = $IPRaw[$j-1] #Data $v6_IPv6 = $Row.Split(":")[1].trim() $v6_MAC = $v6_MAC.Split(":")[1].trim() $v6_Adaptername = $v6_Adaptername.Replace(":","") $IPData =@($v6_IPv6,$v6_MAC,$v6_Adaptername) #LOG Write-Host "$($v6_IPv6);$($v6_MAC);$($v6_Adaptername)" -F Green #Clearing Clear-Variable v6_* } $j=0 $i++ } } Get-Ipv6 <# Ausgabe #> # fe80;E4-B3-18-E6-B1-58;Drahtlos-LAN-Adapter Drahtlosnetzwerkverbindung |
Download Script
Die Scripte können hier ebenfalls heruntergeladen werden.
[wpfilebase tag=file id=15 /]
[wpfilebase tag=file id=16 /]
rewe
Hi, ich musste im IPv6 Skript folgende Zeile anpassen, damit nicht nur der erste Block bis zum nächsten Doppelpunkt ausgegeben wird.
$v6_IPv6 = $Row.Split(„:“)[1].trim()
$v6_IPv6 = $Row.Split(„:“,2)[1].trim()
Vielen Dank für Deine Arbeit!
VG