Get-NetAdapter: NICs verwalten mit PowerShell

    NetzwerkadapterPowerShell bietet seit Windows 8 und Server 2012 eine Reihe von Cmdlets, mit denen sich die Einstellungen von Netzwerk­adaptern 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 Schnitt­stellen 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

    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-NetAdapter­Advanced­Property und Get-NetAdapter­Power­Management.

    Get-NetAdapterPowerManagement liefert auch Infos zur Konfiguration von Wake-on-LAN.

    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.

    Keine Kommentare