Delen via


Het verkrijgen van WMI-objecten 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-CimInstance, een van de handigste voor het uitvoeren van echt werk. 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 gegevens 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 Administrators groep 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 het meest algemene geval te demonstreren en u eraan te herinneren aan de parameter. De naamruimte is standaard ingesteld op root/CIMV2, en kan ook worden weggelaten. Ten slotte kunt u met de meeste cmdlets de naam van algemene parameters weglaten. Als er met Get-CimInstancegeen naam is opgegeven voor de eerste parameter, wordt deze door PowerShell als de parameter Klasse behandeld. Dit betekent dat de laatste opdracht kan zijn uitgegeven door het volgende te typen:

Get-CimInstance Win32_OperatingSystem

De klasse Win32_OperatingSystem heeft nog 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;}
...

Eigenschappen die niet standaard zijn weergeven met Format-cmdlets

Als u informatie uit de Win32_OperatingSystem-klasse wilt weergeven die niet standaard wordt weergegeven, kunt u dit doen met de Format-cmdlets. 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

Wildcards werken met eigenschapsnamen in Format-Table, zodat het uiteindelijke pijplijnelement kan worden gereduceerd 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