IT-Administratoren können viel mit PowerShell und der Befehlszeile tun; die Arbeit mit der Windows-Netzwerk ist eine davon. In diesem Tutorial erfahren Sie, wie Sie PowerShell verwenden, um IP-Adressen von Netzwerkadaptern auf einem Windows-Computer mit dem Get-NetIPAddress
-Befehl und WMI zu erhalten.
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass Sie auf einem Computer mit Windows 10 oder höher und Windows PowerShell v5.1 installiert sind. Es wird auch angenommen, dass Sie sich in einer Active Directory-Umgebung befinden. Wenn nicht, sollten Sie sich mit der Credential
-Eigenschaft auf dem New-CimSession
-Befehl vertraut machen.
Verwendung von Get-NetIPAddress
PowerShell verfügt über verschiedene Cmdlets zur Arbeit mit Netzwerkverbindungen wie Get-NetAdapter
, Get-NetAdapterBinding
, und sogar eines speziell zur Suche von IP-Adressen namens Get-NetIPAddress
. Wenn Sie PowerShell verwenden möchten, um die IP-Adresse in einem einfachen Skript zu erhalten, nutzen Sie unbedingt diese Cmdlets.
Halten Sie es einfach. Wenn PowerShell einen einfacheren Weg bietet, etwas zu tun, dann tun Sie es!
Zum Beispiel, um die IPv4-Adresse auf allen Netzwerkadaptern eines lokalen Computers zu finden, führen Sie eine einzige Zeile aus.

Die obige Ausgabe bezieht sich auf einen spezifischen Netzwerkadapter wie den Ethernet-Adapter und gibt nur die IP-Adresse zurück.

Fertig! Die Verwendung von PowerShell, um eine IP-Adresse zu erhalten, ist ein einfacher Prozess, zumindest viel einfacher als andere Mittel.
Wenn Sie kein Fan von PowerShell sind, können Sie auch den ipconfig-Befehl verwenden, um eine IP-Adresse zu erhalten. Erfahren Sie mehr über ipconfig bei Die Ipconfig-Befehle, die Sie kennen müssen.
Warum CIM/WMI verwenden?
Wenn Sie das Get-NetIPAddress
Cmdlet ausführen, fragt PowerShell tatsächlich WMI ab, um diese Informationen abzurufen. Warum ist es wichtig, das zu wissen? Weil Sie WMI direkt selbst abfragen können. Aber warum WMI verwenden, wenn Sie einen einzigen Befehl verwenden können?
Einer der häufigsten Gründe, WMI anstelle eines einzelnen Befehls wie Get-NetIPAddress
zu verwenden, ist, wenn Sie bereits WMI abfragen. WMI enthält viele Systeminformationen, die beim Erstellen von Skripten für Inventurzwecke nützlich sind.
Wenn Sie mit PowerShell mit WMI kommunizieren, können Sie eine CIM-Sitzung ähnlich einer PSRemoting-Sitzung erstellen. Eine Sitzung zu verwenden, ist eine effiziente Art, sich einmal an einem Computer zu authentifizieren und diese Verbindung wiederholt zu nutzen.
Verwenden Sie CIM, um eine IP-Adresse zu erhalten, wenn Sie diese Aufgabe als Teil eines größeren Skripts erstellen.
CIM ohne Sitzung abfragen
Wenn Sie ein PowerShell-Skript erstellen und CIM verwenden, um verschiedene Informationen abzufragen, sollten Sie eine wiederverwendbare CIM-Sitzung verwenden. Eine einzelne Sitzung wiederzuverwenden beschleunigt nicht nur Ihr Skript, sondern reduziert auch die Code-Duplikation.
Beispielweise möchten Sie vielleicht herausfinden, welches Betriebssystem auf einem entfernten Windows-Computer läuft. CIM speichert den OS-Namen in einer Eigenschaft namens „Caption“ in der Klasse „Win32_OperatingSystem“. Um diese Informationen zu erhalten, verwenden Sie den Get-CimInstance
-Befehl unten, geben Sie den Computernamen (REMOTECOMPUTER
), die CIM-Klasse (Win32_OperatingSystem
) an und beziehen Sie sich nur auf die Eigenschaft Caption
des Objekts.
Wenn Sie Get-CimInstance
ausführen, muss PowerShell den Remote-Computer finden, die angemeldeten Anmeldeinformationen übermitteln und schließlich CIM nach den benötigten Informationen abfragen. Dies erfordert viel Aufwand, wenn Get-CimInstance
ohne Sitzung ausgeführt wird.
Was ist, wenn Sie ein Server-Inventarskript erstellen und auch Informationen zu Speicher, Arbeitsspeicher, Netzwerken usw. abrufen möchten? In diesem Fall würden Sie viele Get-CimInstance
-Befehle wie unten haben.
Ihr Skript würde sich viermal mit REMOTECOMPUTER
verbinden, und was ist, wenn sich der Computernamen ändert? Sie müssten diesen Computernamen suchen/ersetzen, was beim Codieren nie ein gutes Zeichen ist.
Erstellen einer CIM-Sitzung
Statt Get-CimInstance
mit einer Sitzung zu verwenden, sollten Sie eine einzige CIM-Sitzung mit dem New-CimSession
-Befehl erstellen und diese Sitzung wiederholt verwenden.
Anstatt sich immer wieder bei einem entfernten Computer anzumelden, erstellen Sie eine einzige CIM-Sitzung mit New-CimSession
und übergeben Sie diese Sitzung an Get-CimInstance
wie unten gezeigt.
Wenn Sie mit der Sitzung fertig sind, trennen Sie sie und entfernen Sie sie aus dem Speicher.
Die Verwendung von CIM-Sitzungen wie oben gezeigt, ist eine großartige Möglichkeit, mit CIM/WMI zu arbeiten.
Den richtigen Netzwerkadapter finden
Da ein Windows-Computer verschiedene Netzwerkadapter haben kann, müssen Sie zunächst eingrenzen, von welchem Netzwerkadapter Sie die IP-Adresse erhalten möchten. Verwenden Sie bei der Verwendung von WMI die Klasse Win32_NetworkAdapterConfiguration. Diese Klasse liefert viele Informationen, die auch von Get-NetIPAddress
zurückgegeben werden.
Erstellen Sie zunächst ein PowerShell-Skript mit dem Namen des entfernten Computers, erstellen Sie eine neue CIM-Sitzung und fügen Sie dann Ihre Zeile zum Entfernen der CIM-Sitzung hinzu.
Nachdem Sie den Code für die CIM-Sitzung erstellt haben, fügen Sie die WMI-Abfrage ein.

Wie Sie sehen können, zeigt die Standardausgabe oben nicht die IP-Adresse an. Sie müssen etwas tiefer graben. Es gibt auch keine einzelne Instanz zurück. Wie können Sie denjenigen eingrenzen, der die IP-Adresse enthält, nach der Sie suchen?
Um das zu tun, zeigen Sie zunächst alle Eigenschaften mit Select-Object
an.
Scrollen Sie durch die Ausgabe, und Sie werden feststellen, dass einige Netzwerkadapter keine IP-Adresse haben, einige eine und einige mehrere IPs! Sie müssen das einschränken. Sie müssen einige Standardkriterien finden, nach denen Sie filtern können, damit sie auf alle Server angewendet werden können.

Auf jedem Adapter sollten Sie die Eigenschaft IPEnabled
sehen. Wenn diese Eigenschaft auf True gesetzt ist, ist das TCP/IP-Protokoll an diese Netzwerkkarte gebunden, was eine Voraussetzung für eine IP-Adresse ist. Sie müssen die Netzwerkkarten eingrenzen, bei denen die Eigenschaft IPEnabled
auf True gesetzt ist, und dann haben Sie den gesuchten Adapter.
Beim Filtern von WMI-Instanzen ist es am besten, den Filter
-Parameter bei Get-CimInstance
zu verwenden. In der PowerShell-Community gibt es ein Motto, das besagt: „Filter links“. Wenn Sie die Möglichkeit haben, bedeutet dieser Spruch immer, die Ausgabe so weit wie möglich links zu filtern.
Verwenden Sie Where-Object
nicht, es sei denn, es ist unbedingt erforderlich. Die Leistung wird viel schneller sein, da unnötige Objekte in der Pipeline vermieden werden.
Der Filter
-Parameter bei Get-CimInstance
verwendet Windows Query Language (WQL). WQL ist eine kleine Teilmenge von SQL. Der Filter
-Parameter erwartet die gleiche Einschränkung WHERE Klausel-Syntax wie SQL.
Um alle CIM-Instanzen der Klasse Win32_NetworkAdapterConfiguration mit der Eigenschaft IPEnabled auf True zu finden, verwenden Sie die WQL-Abfrage SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
Da wir bereits den Klassennamen für das ClassName
-Parameterargument in Get-CimInstance
angeben, müssen wir für den Filter
IPEnabled = 'True'
angeben. Dies gibt nur den Netzwerkadapter mit der IP-Adresse zurück.
Wenn Sie den obigen Code-Schnipsel ausführen, sollten Sie sehen, dass Get-CimInstance
nur eine einzelne (oder eine begrenzte Anzahl) von Instanzen zurückgibt.
Da Sie jetzt eine einzelne CIM-Instanz haben und die Eigenschaft kennen, nach der Sie suchen (IPAddress
), schauen wir uns an, wie sie aussieht. Sie werden feststellen, dass in diesem Fall eine einzelne CIM-Instanz zurückgegeben wird, jedoch mit drei Zeichenketten für die Eigenschaft IPAddress
, einschließlich IPV6-Adressen.
Sie müssen einige Elemente weiter filtern. Da WQL nicht tiefer als den Wert der Eigenschaft IPAddress
filtern kann, müssen Sie die IPv4-Adresse jetzt analysieren.
Die IPV4-Adresse ist normalerweise die erste, die im Array definiert ist. Wählen Sie diese aus, indem Sie auf den Index 0 verweisen, wie unten gezeigt. Wenn Sie dies tun, sehen Sie, dass nur eine einzelne IPV4-IP-Adresse zurückgegeben wird.
Die IPV4-Adresse ist möglicherweise nicht immer das erste Array-Element. Tatsächlich ist die IPAddress-Eigenschaft möglicherweise nicht einmal ein Array. IP-Konfigurationen variieren stark über Adapter und verschiedene Konfigurationen. Möglicherweise müssen Sie kreativ beim Filtern vorgehen.
Fazit
Wenn Sie eine IP-Adresse von einem Computer abrufen müssen, sehen Sie sich zuerst das Get-NetIPAddress
-Cmdlet an. Wenn Sie ein umfangreicheres Skript erstellen oder aus irgendeinem Grund dieses Befehls nicht ausführen können, sollten Sie in Betracht ziehen, Get-CimInstance
und eine CIM-Sitzung zu verwenden, um die Arbeit zu erledigen.
Source:
https://adamtheautomator.com/powershell-get-ip-address/