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-CimInstance
een 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/CIMV2
op en kan ook worden weggelaten. Ten slotte kunt u met de meeste cmdlets de naam van algemene parameters weglaten. Als Get-CimInstance
er geen naam is opgegeven voor de eerste parameter, wordt deze door PowerShell als klasseparameter behandeld. 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