WMI-objecten ophalen met Get-CimInstance

Dit voorbeeld is alleen van toepassing op Windows-platforms.

Windows Management Instrumentation (WMI) is een kerntechnologie voor Windows-systeembeheer, omdat hiermee een breed scala aan informatie op een uniforme manier beschikbaar wordt gesteld. Vanwege hoeveel WMI het mogelijk maakt, is de PowerShell-cmdlet voor toegang tot WMI-objecten, Get-CimInstanceeen van de handigste voor het uitvoeren van echte werkzaamheden. We gaan bespreken hoe u de CIM-cmdlets gebruikt voor toegang tot WMI-objecten en hoe u vervolgens WMI-objecten gebruikt om specifieke dingen te doen.

WMI-klassen weergeven

Het eerste probleem waarmee de meeste WMI-gebruikers te maken hebben, probeert erachter te komen wat er met WMI kan worden gedaan. WMI-klassen beschrijven de resources die kunnen worden beheerd. Er zijn honderden WMI-klassen, waarvan sommige tientallen eigenschappen bevatten.

Get-CimClass lost dit probleem op door WMI detecteerbaar te maken. U kunt een lijst ophalen met de WMI-klassen die beschikbaar zijn op de lokale computer door het volgende te typen:

Get-CimClass -Namespace root/CIMV2 | 
    Where-Object CimClassName -like Win32* | 
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

U kunt dezelfde informatie ophalen van een externe computer met behulp van de parameter ComputerName , waarbij u een computernaam of IP-adres opgeeft:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

De klassevermelding die door externe computers wordt geretourneerd, kan variëren vanwege het specifieke besturingssysteem waarop de computer wordt uitgevoerd en de specifieke WMI-extensies worden toegevoegd door geïnstalleerde toepassingen.

Notitie

Wanneer u CIM-cmdlets gebruikt om verbinding te maken met een externe computer, moet de externe computer WMI uitvoeren en moet het account dat u gebruikt zich in de lokale groep Beheer istrators op de externe computer bevinden. Op het externe systeem hoeft PowerShell niet te zijn geïnstalleerd. Hiermee kunt u besturingssystemen beheren waarop PowerShell niet wordt uitgevoerd, maar waarvoor WMI wel beschikbaar is.

WMI-klassedetails weergeven

Als u de naam van een WMI-klasse al kent, kunt u deze gebruiken om direct informatie op te halen. Een van de WMI-klassen die vaak worden gebruikt voor het ophalen van informatie over een computer, is bijvoorbeeld Win32_OperatingSystem.

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    22621       USER1          00330-80000-00000-AA175 10.0.22621

Hoewel we alle parameters weergeven, kan de opdracht op een meer beknopte manier worden uitgedrukt. De parameter ComputerName is niet nodig wanneer u verbinding maakt met het lokale systeem. We laten het zien om de meest algemene case te demonstreren en u eraan te herinneren dat de parameter is. De naamruimte wordt standaard ingesteld root/CIMV2op en kan ook worden weggelaten. Ten slotte kunt u met de meeste cmdlets de naam van algemene parameters weglaten. Als Get-CimInstanceer geen naam is opgegeven voor de eerste parameter, wordt deze door PowerShell als klasseparameterbehandeld. Dit betekent dat de laatste opdracht kan zijn uitgegeven door het volgende te typen:

Get-CimInstance Win32_OperatingSystem

De Win32_OperatingSystem-klasse heeft veel meer eigenschappen dan die hier worden weergegeven. U kunt Get-Member gebruiken om alle eigenschappen te bekijken. De eigenschappen van een WMI-klasse zijn automatisch beschikbaar, zoals andere objecteigenschappen:

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Niet-standaardeigenschappen weergeven met indelings-cmdlets

Als u de informatie in de Win32_OperatingSystem-klasse wilt die niet standaard wordt weergegeven, kunt u deze weergeven met behulp van de cmdlets Format . Als u bijvoorbeeld beschikbare geheugengegevens wilt weergeven, typt u:

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

Notitie

Jokertekens werken met eigenschapsnamen in Format-Table, zodat het uiteindelijke pijplijnelement kan worden verkleind tot Format-Table -Property Total*Memory*, Free*

De geheugengegevens kunnen beter leesbaar zijn als u deze opmaken als een lijst door het volgende te typen:

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2