Tags: Netzwerk, PowerShell, Remote-Verwaltung
PowerShell bietet seit Windows 8 und Server 2012 eine Reihe von Cmdlets, mit denen sich die Einstellungen von Netzwerkadaptern auslesen und zum Teil auch verändern lassen. Zu diesen Eigenschaften zählen unter anderem die MAC-Adresse, Wake-on-LAN oder an NICs gebundene Protokolle.
Auf einer Workstation ermittelt man die Einstellungen von Netzadaptern meistens über die GUI, wo man auch die erweiterten Eigenschaften ansehen und gegebenenfalls auch ändern kann. Unter Server Core oder dem kommenden Nano Server muss man sich hingegen bei solchen Aufgaben auf die Kommandozeile verlassen. Neben dem Dienstprogramm netsh.exe empfiehlt sich dort primär PowerShell, das auch Netzwerk-Interfaces remote verwalten kann.
Konfiguration auslesen mit Get-NetAdapter
Wenn man sich eine Übersicht über die vorhandenen NICs und ihren Status verschaffen möchte, dann liefert Get-NetAdapter die meisten der benötigten Informationen. Ruft man das Cmdlet ohne Argumente auf, dann listet es alle Adapter inklusive einiger weniger Eigenschaften auf. Zu diesen gehören die MAC-Adresse, der Status und die Geschwindigkeit.
Tatsächlich ermittelt Get-NetAdapter jedoch über 100 Eigenschaften, die man sich mit Hilfe von Get-Member anzeigen lassen kann:
Get-NetAdapter -Name Ethernet0 | Get-Member -MemberType Property
In diesem Beispiel beschränkt sich der Aufruf auf nur ein Interface, nämlich Ethernet0, um die mehrfache Ausgabe der Liste zu vermeiden. Der Parameter Name akzeptiert auch Wildcards, so dass man etwa alle Schnittstellen mit der Bezeichnung Ethernet[n] mittels
Get-NetAdapter -Name Ethernet*
abfragen könnte. Alternativ eignet sich die Beschreibung (InterfaceDescription) oder der Index (InterfaceIndex) des Adapters, um die Ausgabe zu filtern:
Get-NetAdapter -InterfaceDescription Real*
bzw.
Get-NetAdapter -InterfaceIndex 3
Hat man mit Hilfe von Get-Member die benötigten Eigenschaften des Objekts MSFT_NetAdapter gefunden, dann kann man sie anschließend wie gewohnt mit Hilfe von Select-Object gezielt extrahieren:
Get-NetAdapter -Name vEth* | select Name, MacAddress, MediaConnectionState, MediaType
Einige der Attribute lassen sich über Parameter von Get-NetAdapter als Filter nutzen, beispielsweise um nur einen physikalische Adapter zu eruieren:
Get-NetAdapter -Physical
Aber bereits für die gegenteilige Abfrage, die nur virtuelle Adapter zurückgeben soll, ist man wieder auf Select-Object angewiesen:
Get-NetAdapter | ? Virtual -eq $true
Will man nur WLAN-Adapter anzeigen, dann findet man mit
Get-NetAdapter | select name, PhysicalMediaType
erst den PhysicalMediaType eines WLAN-Adapters heraus. In den meisten Fällen wird das Native 802.11 sein. Anschließend kann man über dieses Kriterium filtern, um nur WiFi-Adapter zu erhalten:
Get-NetAdapter -Physical | where PhysicalMediaType -eq "Native 802.11"
Möchte man sämtliche Eigenschaften eines Interfaces mit einem Kommando auflisten, dann eignet sich dafür Format-List mit dem Parameter Property:
Get-NetAdapter -Name vEth* | Format-List -Property *
Weitere Attribute mit Get-NetAdapterAdvancedProperty
Aber auch damit bleiben noch einige Attribute außen vor, zum Beispiel solche zum Offloading verschiedener Operationen oder die Einstellungen zu Jumbo Frames oder Wake-on-LAN. Um sie zu erhalten, bedarf es separater Cmdlets. Dazu zählen Get-NetAdapterAdvancedProperty und Get-NetAdapterPowerManagement.
Beide filtern die Adapter auf die gleiche Weise wie Get-NetAdapter, indem man dafür die Parameter Name oder InterfaceDescription verwendet. Auch bei der Auswahl der Attribute geht man nach demselben Muster vor.
Wake-on-LAN konfigurieren
Um beispielsweise die Einstellungen für Wake-On-LAN auf allen physikalischen Interfaces zu ermitteln, deren Name mit Eth beginnt, würde man diesen Befehl verwenden:
Get-NetAdapter -Physical -Name Eth* | Get-NetAdapterPowerManagement | select Name, WakeOnMagicPacket
Möchte man WoL auf allen diesen Adaptern aktivieren, dann ist dafür der Gegenspieler Set- NetAdapterPowerManagement zuständig:
Set-NetAdapterPowerManagement -Name Eth* -WakeOnMagicPacket Enabled
Gebundene Protokolle anzeigen
Bis dato fehlen noch Informationen zu den Protokollen, die an bestimmte Interfaces gebunden sind. Diese liefert das Cmdlet:
Get-NetAdapterBinding -Name Eth* -AllBindings
Dieses Beispiel zeigt alle Protokolle an, die an Adapter gebunden sind, deren Name mit Eth beginnt. Will man etwa alle Schnittstellen eruieren, bei denen IPv4 nicht aktiviert ist, dann hilft dieses Kommando:
Get-NetAdapterBinding -Name * | ? {$_.ComponentID -eq "ms_tcpip" -and $_.Enabled -eq $false}
Die Eigenschaften DisplayName und ComponentID der Protokolle kann man nutzen, um ihren Status zu ändern. So ließe sich mit
Set-NetAdapterBinding -Name vEthernet -ComponentID ms_tcpip -Enabled $true
auf dem Adapter mit dem Namen vEthernet IPv4 aktivieren.
Adapter neu starten
Als nützlich bei der Änderungen von Einstellungen kann sich das Cmdlet Restart-NetAdapter erweisen. Es entspricht dem Deaktivieren und einem erneuten Aktivieren des Interfaces über die GUI. Damit erzwingt man etwa auch das Anfordern einer IP-Adresse über DHCP.
Alle hier besprochenen Kommandos lassen sich mit Hilfe des Parameters CimSession auch remote anwenden. Für eine Reihe von Eigenschaften existieren zudem eigene Cmdlets, eine vollständige Liste der Befehle für NetAdapter findet sich auf TechNet.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links