使用 Get-CimInstance 取得 WMI 物件
此範例僅適用於 Windows 平臺。
Windows Management Instrumentation (WMI) 是 Windows 系統管理的核心技術,因為它會以統一的方式公開各種資訊。 由於 WMI 能夠產生多少,因此用來存取 WMI 物件的 Get-CimInstance
PowerShell Cmdlet 是執行實際工作最有用的 Cmdlet 之一。 我們將討論如何使用 CIM Cmdlet 來存取 WMI 對象,然後如何使用 WMI 物件來執行特定動作。
列出 WMI 類別
大部分 WMI 用戶面臨的第一個問題是嘗試找出 WMI 可以做些什麼。 WMI 類別描述可管理的資源。 有數百個 WMI 類別,其中有些類別包含數十個屬性。
Get-CimClass
藉由讓 WMI 可供探索來解決此問題。 您可以輸入下列命令,取得本機電腦上可用的 WMI 類別清單:
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
...
您可以使用 ComputerName 參數,從遠端電腦擷取相同的資訊,並指定電腦名稱或 IP 位址:
Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29
遠端電腦傳回的類別清單可能會因為電腦執行的特定作業系統而有所不同,而且已安裝的應用程式會新增特定的WMI擴充功能。
注意
使用 CIM Cmdlet 連線到遠端電腦時,遠端電腦必須執行 WMI,而您所使用的帳戶必須位於遠端電腦上的本機 管理員 istrators 群組中。 遠程系統不需要安裝PowerShell。 這可讓您管理未執行 PowerShell 但可使用 WMI 的作業系統。
顯示 WMI 類別詳細數據
如果您已經知道 WMI 類別的名稱,您可以使用它立即取得資訊。 例如,用來擷取計算機相關信息的其中一個WMI類別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
雖然我們顯示所有參數,但命令可以更簡潔的方式表示。
連接到 本機系統時,不需要 ComputerName 參數。 我們會示範最一般的情況,並提醒您有關 參數。 命名空間預設為 root/CIMV2
,也可以省略 和 。 最後,大部分 Cmdlet 可讓您省略一般參數的名稱。 使用 Get-CimInstance
時,如果未指定第一個參數的名稱,PowerShell 會將它 視為 Class 參數。 這表示最後一個命令可能已發出,方法是輸入:
Get-CimInstance Win32_OperatingSystem
Win32_OperatingSystem 類別具有比這裏顯示的屬性多得多。 您可以使用 Get-Member 來查看所有屬性。 WMI 類別的屬性會自動像其他物件屬性一樣提供:
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;}
...
使用 Format Cmdlet 顯示非預設屬性
如果您想要預設未顯示之Win32_OperatingSystem類別中所包含的資訊,您可以使用 Format Cmdlet 加以顯示。 例如,如果您想要顯示可用的記憶體資料,請輸入:
Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
41787920 16622096 9537952 33071884 25056628
注意
通配符在 中使用 Format-Table
屬性名稱,因此可以將最終管線項目縮減為 Format-Table -Property Total*Memory*, Free*
如果您輸入下列命令將記憶體資料格式化為清單,記憶體資料可能會更容易閱讀:
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