取得 WMI 物件 (Get-WmiObject)
Windows Management Instrumentation (WMI) 以統一的方式公開多種資訊,是 Windows 系統管理的核心技術。由於 WMI 幾乎能協助完成所有事項,所以 Windows PowerShell 用於存取 WMI 物件的 Get-WmiObject Cmdlet 可說是執行實際工作最有用的工具之一。以下將討論如何使用 Get-WmiObject 存取 WMI 物件,接著介紹如何使用 WMI 物件來執行特定事項。
列舉 WMI 類別
大多數 WMI 使用者會遇到的第一個問題就是 WMI 究竟能協助完成哪些事項。WMI 類別描述了可受管理的資源。WMI 類別多達幾百個,某些類別甚至包含數十個屬性。
Get-WmiObject 藉由提供可探索的 WMI 來解決這個問題。如需取得本機電腦上可用的 WMI 類別清單,請輸入:
PS> Get-WmiObject -List __SecurityRelatedClass __NTLMUser9X __PARAMETERS __SystemSecurity __NotifyStatus __ExtendedStatus Win32_PrivilegesStatus Win32_TSNetworkAdapterSettingError Win32_TSRemoteControlSettingError Win32_TSEnvironmentSettingError ...
若使用 ComputerName 參數指定電腦名稱或 IP 位址,即可從遠端電腦擷取相同資訊:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 __SystemClass __NAMESPACE __Provider __Win32Provider __ProviderRegistration __ObjectProviderRegistration ...
遠端電腦傳回的類別清單可能會有不同,依電腦所執行的特定作業系統與已安裝應用程式所附加的特定 WMI 延伸模組而定。
附註: | |
使用 Get-WmiObject 連接遠端電腦時,遠端電腦必須已執行 WMI,且在預設組態下,您所使用的帳戶必須隸屬於遠端電腦的本機系統管理員群組。遠端系統可以不必安裝 Windows PowerShell。這樣您就能使用其提供的 WMI 來管理未執行 Windows PowerShell 的作業系統。 |
連接本機電腦時甚至亦可加上 ComputerName。您可以使用本機電腦的名稱或 IP 位址 (或是回送位址 127.0.0.1),甚或 WMI 樣式 '.' 做為電腦名稱。假設執行 Windows PowerShell 的電腦名稱為 Admin01 且 IP 位址為 192.168.1.90,則以下幾個命令都將傳回該電腦的 WMI 類別清單:
Get-WmiObject -List Get-WmiObject -List -ComputerName . Get-WmiObject -List -ComputerName Admin01 Get-WmiObject -List -ComputerName 192.168.1.90 Get-WmiObject -List -ComputerName 127.0.0.1 Get-WmiObject -List -ComputerName localhost
Get-WmiObject 預設使用 root/cimv2 命令空間。若要指定不同的 WMI 命名空間,請使用 Namespace 參數並指定對應的命名空間路徑:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root __SystemClass __NAMESPACE __Provider __Win32Provider ...
顯示 WMI 類別詳細資料
如果您已知道 WMI 類別的名稱,即可直接使用名稱取得資訊。例如,一般用於擷取電腦相關資訊的 WMI 類別是 Win32_OperatingSystem。
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . SystemDirectory : C:\WINDOWS\system32 Organization : Global Network Solutions BuildNumber : 2600 RegisteredUser : Oliver W. Jones SerialNumber : 12345-678-9012345-67890 Version : 5.1.2600
雖然以上展示了所有的參數,其實此命令還能再做簡化。連接本機電腦時不需要 ComputerName 參數。命令中包含這個參數是為了示範最一般的情況,同時提醒您有這個參數存在。Namespace 的預設值即為 root/cimv2,當然也可以省略。最後,大多數的 cmdlet 皆可省略一般參數的名稱。就 Get-WmiObject 而言,如果第一個參數沒有指定名稱,Windows PowerShell 會將其視為 Class 參數。因此,上述命令可以改寫成:
Get-WmiObject Win32_OperatingSystem
上述屬性只是 Win32_OperatingSystem 類別所有屬性的一小部分。您可以使用 Get-Member 檢視全部屬性。列舉 WMI 類別屬性的做法和其他的物件屬性一樣:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste m Name MemberType Definition ---- ---------- ---------- __CLASS Property System.String __CLASS {... ... BootDevice Property System.String BootDevic... BuildNumber Property System.String BuildNumb... ...
使用 Format Cmdlet 顯示非預設屬性
如果您想查看 Win32_OperatingSystem 類別所包含但預設情況下並未顯示的資訊,則可使用 Format Cmdlet 加以顯示。例如,若要顯示可用的記憶體資料,請輸入:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi ory ry ngFiles --------------- --------------- --------------- --------------- --------------- 2097024 785904 305808 2056724 1558232
附註: | |
Format-Table 中的屬性名稱允許使用萬用字元,因此最後一個管線元素可簡化為 Format-Table -Property TotalV*,Free* |
以清單格式顯示記憶體資料可能更容易判讀,如下所示:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles TotalVirtualMemorySize : 2097024 TotalVisibleMemorySize : 785904 FreePhysicalMemory : 301876 FreeVirtualMemory : 2056724 FreeSpaceInPagingFiles : 1556644