IT-beheerders kunnen veel doen met PowerShell en de commandoregel; werken met Windows-netwerken is een van die manieren. In deze zelfstudie ga je leren hoe je PowerShell kunt gebruiken om IP-adressen te krijgen van netwerkadapters op een Windows-computer met het Get-NetIPAddress
-cmdlet en WMI.
Vereisten
Deze zelfstudie gaat ervan uit dat je op een Windows 10 of nieuwer computer zit met Windows PowerShell v5.1 geïnstalleerd. Er wordt ook van uitgegaan dat je in een Active Directory-omgeving bent. Zo niet, zorg er dan voor dat je meer te weten komt over de Credential
-eigenschap op het New-CimSession
-cmdlet.
Het gebruik van Get-NetIPAddress
PowerShell heeft verschillende cmdlets om te werken met netwerkverbindingen zoals Get-NetAdapter
, Get-NetAdapterBinding
, en zelfs één specifiek om IP-adressen te vinden genaamd Get-NetIPAddress
. Als je PowerShell wilt gebruiken om het IP-adres te krijgen in een eenvoudig script, gebruik dan zeker deze cmdlets.
Houd het simpel. Als PowerShell een eenvoudigere manier biedt om iets te doen, doe het dan!
Bijvoorbeeld, om het IPv4-adres op alle netwerkadapters op een lokale computer te vinden, voer je een enkele regel uit.

De uitvoer hierboven verwijst naar een specifieke netwerkadapter zoals de Ethernet-adapter en geeft alleen het IP-adres terug.

Je bent klaar! Simpelweg PowerShell gebruiken om een IP-adres te krijgen is een eenvoudig proces, in ieder geval veel eenvoudiger dan andere middelen te gebruiken.
Als je geen fan bent van PowerShell, kun je ook het ipconfig-commando gebruiken om een IP-adres te krijgen. Kijk meer over ipconfig op De Ipconfig-opdrachten die je moet kennen.
Waarom CIM/WMI gebruiken?
Wanneer je de Get-NetIPAddress
cmdlet uitvoert, raadpleegt PowerShell eigenlijk WMI om die informatie op te halen. Waarom is het belangrijk om dit te weten? Omdat je WMI rechtstreeks zelf kunt bevragen. Maar waarom WMI gebruiken als je een enkele opdracht kunt gebruiken?
Een van de meest voorkomende redenen om WMI te gebruiken in plaats van een enkele opdracht zoals Get-NetIPAddress
is wanneer je al WMI bevraagt. WMI bevat veel systeeminformatie die handig is bij het bouwen van scripts voor inventarisatiedoeleinden.
Bij communicatie met WMI via PowerShell kun je een CIM-sessie maken, vergelijkbaar met een PSRemoting-sessie. Het gebruik van een sessie is een efficiënte manier om eenmaal op een computer te authenticeren en die verbinding herhaaldelijk te hergebruiken.
Gebruik CIM om een IP-adres te verkrijgen wanneer je deze taak als onderdeel van een groter script bouwt.
Bevragen van CIM zonder een sessie
Als je een PowerShell-script bouwt met CIM om verschillende informatie op te vragen, moet je een herbruikbare CIM-sessie gebruiken. Het hergebruiken van een enkele sessie versnelt niet alleen je script, maar vermindert ook code duplicatie.
Bijvoorbeeld, misschien wilt u weten welk besturingssysteem een externe Windows-computer draait. CIM bevat de naam van het besturingssysteem in een eigenschap genaamd Caption binnen de Win32_OperatingSystem-klasse. Om deze informatie te krijgen, zou u de Get-CimInstance
cmdlet hieronder gebruiken, waarbij u de computernaam (REMOTECOMPUTER
), de CIM-klasse (Win32_OperatingSystem
) specificeert en alleen verwijst naar de Caption
-eigenschap van het object.
Wanneer u Get-CimInstance
uitvoert, moet PowerShell de externe computer vinden, de ingelogde referenties doorgeven en uiteindelijk CIM bevragen voor de informatie die u nodig heeft. Er gaat veel overhead gepaard met het uitvoeren van Get-CimInstance
zonder sessie.
Wat als u een script voor serverinventarisatie bouwt en ook informatie wilt vinden over opslag, geheugen, netwerken, enzovoort? In dat geval zou u veel Get-CimInstance
-opdrachten hebben zoals hieronder.
Uw script zal vier keer verbinding maken met REMOTECOMPUTER
in het bovenstaande codefragment, en wat als de computernaam verandert? Dan moet u die computernaam vinden/vervangen, wat nooit een goed teken is tijdens het coderen.
Het maken van een CIM-sessie
In plaats van Get-CimInstance
met een sessie te gebruiken, zou u een enkele CIM-sessie moeten maken met behulp van de New-CimSession
cmdlet en die sessie hergebruiken.
In plaats van steeds opnieuw te authenticeren bij een externe computer, maak een enkele CIM-sessie aan met `New-CimSession` en geef die sessie door aan `Get-CimInstance` zoals hieronder.
Zodra je klaar bent met de sessie, verbreek deze en verwijder hem uit het geheugen.
Het gebruik van CIM-sessies zoals hierboven is een uitstekende manier om met CIM/WMI te werken.
Het vinden van de juiste netwerkadapter
Aangezien een Windows-computer verschillende netwerkadapters kan hebben, moet je eerst bepalen welke netwerkadapter je het IP-adres van wilt krijgen. Bij het gebruik van WMI, gebruik de klasse Win32_NetworkAdapterConfiguration. Deze klasse biedt veel van de informatie die `Get-NetIPAddress` retourneert.
Eerst, maak een PowerShell-script met de naam van de externe computer, maak vervolgens een nieuwe CIM-sessie aan en voeg dan je regel toe om de CIM-sessie te verwijderen hieronder.
Zodra je de code voor de CIM-sessie hebt opgebouwd, voeg je de WMI-query in.

Je ziet dat de standaarduitvoer hierboven het IP-adres niet weergeeft. Je zult iets dieper moeten graven. Het retourneert ook geen enkele instantie. Hoe beperk je dat tot degene die het IP-adres heeft waar je naar op zoek bent?
Om dat te doen, toon eerst alle eigenschappen met `Select-Object`.
Blader door de uitvoer en je zult merken dat sommige netwerkadapters geen IP-adres hebben, sommige hebben er één en sommige hebben meerdere IP-adressen! Je moet dat beperken. Je moet een standaardcriterium vinden om op te filteren zodat het kan worden toegepast op alle servers.

Op elke adapter moet je de eigenschap IPEnabled
zien. Als deze eigenschap is ingesteld op True, is het TCP/IP-protocol gebonden aan deze NIC, wat een vereiste is om een IP-adres te hebben. Je moet de NIC’s verkleinen die de eigenschap IPEnabled
ingesteld hebben op True, en dan heb je de adapter gevonden waar je naar op zoek bent.
Bij het filteren van WMI-instanties is het het beste om de Filter
-parameter te gebruiken bij Get-CimInstance
. Er is een motto in de PowerShell-gemeenschap dat zegt “filter links”. Als je de kans hebt, betekent dit gezegde altijd de uitvoer zo ver mogelijk naar links te filteren.
Gebruik niet Where-Object
tenzij het nodig is. De prestaties zullen veel sneller zijn vanwege het gebrek aan overhead bij het verwerken van onnodige objecten over de pijplijn.
De Filter
-parameter bij Get-CimInstance
gebruikt Windows Query Language (WQL). WQL is een kleine subset van SQL. De Filter
-parameter verwacht dezelfde beperking WHERE clausule syntax als SQL zou doen.
Om alle CIM-instanties van de klasse Win32_NetworkAdapterConfiguration met de eigenschap IPEnabled ingesteld op True te vinden, gebruik je de WQL-query SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
Sinds we al de klassenaam specificeren voor het ClassName
-parameterargument in Get-CimInstance
, moeten we ook IPEnabled = 'True'
specificeren voor het Filter
. Dit zorgt ervoor dat alleen de netwerkadapter met het IP-adres wordt geretourneerd.
Wanneer je de bovenstaande codefragment uitvoert, zou je moeten zien dat Get-CimInstance
slechts één (of een beperkte set) instanties retourneert.
Nu je een enkele CIM-instantie hebt en de eigenschap kent waar je naar op zoek bent (IPAddress
), laten we eens kijken hoe het eruitziet. Hieronder zie je dat het in dit geval een enkele CIM-instantie retourneert, maar met drie strings voor de eigenschap IPAddress
, inclusief IPV6-adressen.
Je zult wat meer elementen moeten filteren. Omdat WQL niet dieper kan filteren dan de waarde van de eigenschap IPAddress
, moet je nu de IPv4-adressen eruit filteren.
Het IPV4-adres is meestal het eerste adres dat in de array is gedefinieerd. Haal dat eruit door te verwijzen naar de index 0 zoals hieronder getoond. Wanneer je dat doet, zul je zien dat het slechts één IPV4-IP-adresstring retourneert.
Houd er rekening mee dat het IPV4-adres niet altijd het eerste element in de array hoeft te zijn. Sterker nog, de eigenschap IPAddress is mogelijk niet eens een array. IP-configuraties variëren sterk tussen adapters en verschillende configuraties. Je moet misschien creatief zijn in het filteren ervan.
Conclusie
Als je een IP-adres van een computer moet ophalen met behulp van PowerShell, kijk dan eerst naar de Get-NetIPAddress
-cmdlet. Als je een groter script aan het bouwen bent of om een of andere reden deze opdracht niet kunt uitvoeren, overweeg dan om Get-CimInstance
en CIM-sessie te gebruiken om het vuile werk te doen.
Source:
https://adamtheautomator.com/powershell-get-ip-address/