Pobieranie obiektów WMI za pomocą polecenia Get-CimInstance

Ten przykład dotyczy tylko platform systemu Windows.

Instrumentacja zarządzania Windows (WMI) to podstawowa technologia administracji systemu Windows, ponieważ uwidacznia szeroką gamę informacji w jednolity sposób. Ze względu na to, ile usługa WMI umożliwia, polecenie cmdlet programu PowerShell do uzyskiwania dostępu do obiektów Get-CimInstanceusługi WMI jest jednym z najbardziej przydatnych do wykonywania rzeczywistych zadań. Omówimy sposób używania poleceń cmdlet modelu CIM do uzyskiwania dostępu do obiektów WMI, a następnie używania obiektów WMI do wykonywania określonych czynności.

Wyświetlanie listy klas WMI

Pierwszym problemem, z jakim borykają się większość użytkowników usługi WMI, jest próba ustalenia, co można zrobić za pomocą usługi WMI. Klasy WMI opisują zasoby, którymi można zarządzać. Istnieją setki klas WMI, z których niektóre zawierają dziesiątki właściwości.

Get-CimClass rozwiązanie tego problemu przez odnalezienie usługi WMI. Listę klas WMI dostępnych na komputerze lokalnym można uzyskać, wpisując:

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
...

Te same informacje można pobrać z komputera zdalnego przy użyciu parametru ComputerName , określając nazwę komputera lub adres IP:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

Lista klas zwracana przez komputery zdalne może się różnić w zależności od określonego systemu operacyjnego, na którym jest uruchomiony komputer, a poszczególne rozszerzenia WMI są dodawane przez zainstalowane aplikacje.

Uwaga

W przypadku nawiązywania połączenia z komputerem zdalnym za pomocą poleceń cmdlet modelu CIM komputer zdalny musi mieć uruchomioną usługę WMI, a używane konto musi znajdować się w lokalnej grupie Administracja istratorów na komputerze zdalnym. System zdalny nie musi mieć zainstalowanego programu PowerShell. Dzięki temu można administrować systemami operacyjnymi, które nie działają w programie PowerShell, ale mają dostępną usługę WMI.

Wyświetlanie szczegółów klasy WMI

Jeśli znasz już nazwę klasy WMI, możesz użyć jej do natychmiastowego pobrania informacji. Na przykład jedna z klas WMI często używana do pobierania informacji o komputerze jest 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

Mimo że wyświetlamy wszystkie parametry, polecenie można wyrazić w bardziej zwięzły sposób. Parametr ComputerName nie jest konieczny podczas nawiązywania połączenia z systemem lokalnym. Pokażemy go, aby zademonstrować najbardziej ogólny przypadek i przypomnieć o parametrze. Przestrzeń nazw domyślnie ma root/CIMV2wartość i można również pominąć. Na koniec większość poleceń cmdlet umożliwia pominięcie nazwy typowych parametrów. Jeśli Get-CimInstancedla pierwszego parametru nie określono żadnej nazwy, program PowerShell traktuje go jako parametr Class . Oznacza to, że ostatnie polecenie mogło zostać wydane przez wpisanie:

Get-CimInstance Win32_OperatingSystem

Klasa Win32_OperatingSystem ma o wiele więcej właściwości niż wyświetlane tutaj. Aby wyświetlić wszystkie właściwości, możesz użyć polecenia Get-Member. Właściwości klasy WMI są automatycznie dostępne jak inne właściwości obiektu:

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;}
...

Wyświetlanie właściwości innych niż domyślne za pomocą poleceń cmdlet formatu

Jeśli chcesz, aby informacje zawarte w klasie Win32_OperatingSystem , które nie są wyświetlane domyślnie, możesz je wyświetlić przy użyciu poleceń cmdlet Format . Jeśli na przykład chcesz wyświetlić dostępne dane pamięci, wpisz:

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

Uwaga

Symbole wieloznaczne działają z nazwami właściwości w systemie Format-Table, więc końcowy element potoku można zmniejszyć do Format-Table -Property Total*Memory*, Free*

Dane pamięci mogą być bardziej czytelne, jeśli formatujesz je jako listę, wpisując:

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