Telkens wanneer we informatie willen ontdekken over een Windows-computer en de componenten ervan, kunnen we dat doen met Get-WmiObject
.
Niet alleen lezen, door gebruik te maken van WMI-methoden kan Get-WmiObject
ook acties uitvoeren op lokale of externe systemen. Deze cmdlet is een van de vele in PowerShell die kunnen werken met het WMI-register om het beheer van veel systemen veel gemakkelijker te maken.
Ontdekken van klassen met Get-WmiObject
In de meest eenvoudige vorm kan deze cmdlet informatie opvragen vanaf een lokale computer. Het enige wat u hoeft te weten is de namespace (waarschijnlijk standaard root\cimv2
) en de WMI-klasse waar de informatie die u zoekt zich bevindt.
Er zijn duizenden klassen en u weet waarschijnlijk nog niet welke klasse u wilt gebruiken. Met behulp van Get-WmiObject
kunnen we alle beschikbare klassen in een namespace opvragen. Met Get-WmiObject -List
kunt u alle klassen in de namespace root\cimv2
zien. Als u klassen in een andere namespace wilt controleren, kunt u ook de parameter Namespace
gebruiken.
WMI-eigenschappen verkrijgen
Zodra u de klasse hebt, is het tijd om te onderzoeken welke eigenschappen zich in die klasse bevinden. Misschien wil ik bijvoorbeeld zien welk besturingssysteem een computer gebruikt. Ik bouw misschien een rapport en wil zien wat een externe machine draait. Get-WmiObject
heeft een parameter ComputerName
waar u één of meer externe computers kunt opgeven in plaats van lokaal.
Mijn externe computer is een domeincontroller genaamd DC. Ik zal naar de klasse Win32_OperatingSystem
kijken om te zien welke eigenschappen daar aanwezig zijn.
Dat is nuttige informatie, maar ik zie de naam van het besturingssysteem niet. Net als bij veel andere PowerShell-uitvoer zie je niet alle eigenschappen. Hiervoor moeten we Select-Object
gebruiken om alle eigenschappen terug te geven.
I can now see a property called Caption
that lets me know the version of Windows.
WMI-eigenschappen vinden
Wat als je niet op zoek bent naar een specifieke eigenschap, maar eerder naar een eigenschap die overeenkomt met een specifieke waarde. Bijvoorbeeld, we kunnen alle instanties in de klasse CIM_DataFile
bevragen, maar dat zou elk bestand op het systeem retourneren! In plaats daarvan kunnen we instanties filteren op waarde met behulp van de Filter
– of Query
-parameter. Laten we beide doornemen.
Als voorbeeld gebruik ik de klasse CIM_DataFile
, misschien wil ik alleen instanties vinden die gecomprimeerde bestanden vertegenwoordigen. Aangezien het Compressed
-kenmerk een eigenschap is van elke instantie en het een booleaanse waarde is, kan ik de Filter
-parameter gebruiken om de filter rechtstreeks naar de WMI-provider te sturen, waarbij alleen instanties worden geretourneerd met een Compressed
-eigenschap van True
.
Als je bekend bent met WQL, kun je ook de klasse selecteren en de “filter” zelf specificeren door je eigen WQL-query te maken.
WMI-methoden oproepen
Get-WmiObject
kan niet alleen informatie uit WMI lezen, maar het kan ook het oproepen van WMI-methoden vergemakkelijken. Een veelvoorkomende WMI-methode die wordt opgeroepen, is de Create
-methode op de klasse Win32_Process
. Er zijn verschillende manieren om WMI-methoden op te roepen, zoals het gebruik van Invoke-WmiMethod
, maar dit kan ook worden gedaan met Get-WmiObject
. We moeten gewoon een WMI-instantie vastleggen en vervolgens de methode op dat object aanroepen.
Hier is een voorbeeld van het op afstand starten van notepad.exe op een externe computer. Als bonus gebruiken we ook alternatieve referenties om dit te doen!
WMI, DCOM en PowerShell Remoting
Nog een laatste ding om op te merken is dat de opvolger van deze cmdlet: Get-CimInstance
is. Hoewel Get-CimInstance
enkele voordelen biedt ten opzichte van het gebruik van PowerShell Remoting als standaardprotocol voor externe verbindingen, is Get-WmiObject
soms eenvoudiger te gebruiken.
Get-WmiObject
gebruikt DCOM om te communiceren met externe computers en is meestal ook beschikbaar. Anders moet u PowerShell Remoting inschakelen op externe eindpunten als u Get-CimInstance
via WSMAN wilt gebruiken.
Voor een volledige uitleg, bekijk de Microsoft-documentatie.