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-CimInstance
usł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/CIMV2
wartość i można również pominąć. Na koniec większość poleceń cmdlet umożliwia pominięcie nazwy typowych parametrów. Jeśli Get-CimInstance
dla 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