Get-WmiObject 是從事一般系統管理工作最重要的 Cmdlet。所有關鍵的子系統設定都是透過 WMI 公開。此外,WMI 將資料視為物件,位於包含一或多個項目的集合中。由於 Windows PowerShell 也是處理物件,且提供管線讓您能以同樣的方式處理單一物件或多個物件,您只要透過一般存取 WMI 的方式即可輕鬆執行某些進階工作。

以下範例示範使用 Get-WmiObject 收集任一部電腦的特定資訊。ComputerName 參數會指定成句號值 (.) 代表本機電腦。您可以指定任何可透過 WMI 存取的電腦的名稱或 IP 位址。若要擷取本機電腦的相關資訊,可省略 -ComputerName.

列出桌面設定

第一個命令範例將收集本機電腦桌面的相關資訊。

Get-WmiObject -Class Win32_Desktop -ComputerName .

此命令傳回所有桌面的資訊,不論桌面是否使用中。

附註:

某些 WMI 類別所傳回的資訊可能非常詳細,且通常包含 WMI 類別的中繼資料。這些中繼資料屬性的名稱大多數都是以雙底線開頭,因此您可使用 Select-Object 篩選屬性。使用 [a-z]* 當做 Property 值即可指定只列出以英文字母開頭的屬性。例如:

Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*

若要篩選中繼資料,請使用管線運算子 (|) 將 Get-WmiObject 命令結果傳送給 Select-Object -Property [a-z]*

列出 BIOS 資訊

WMI Win32_BIOS 類別傳回本機電腦系統 BIOS 既相當簡潔而又完整的相關資訊:

Get-WmiObject -Class Win32_BIOS -ComputerName .

列出處理器資訊

使用 WMI 的 Win32_Processor 類別可擷取一般的處理器資訊,但您可能還想進一步篩選這些資訊:

Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*

如需處理器系列的一般描述字串,可以只傳回 Win32_ComputerSystem SystemType 屬性:

PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType
SystemType
----------
X86-based PC

列出電腦製造商與型號

使用 Win32_ComputerSystem 也能取得電腦型號資料。標準狀況下顯示的輸出會提供 OEM 資料,不需要經過篩選:

PS> Get-WmiObject -Class Win32_ComputerSystem
Domain              : WORKGROUP
Manufacturer        : Compaq Presario 06
Model               : DA243A-ABA 6415cl NA910
Name                : MyPC
PrimaryOwnerName    : Jane Doe
TotalPhysicalMemory : 804765696

這類命令所產生的輸出由於傳回的資訊直接來自部分硬體,充其量和您手邊已有的資料都一樣。某些資訊則因硬體製造商沒有設置正確,所以可能無法取得。

列出已安裝的 Hotfix

利用 Win32_QuickFixEngineering 可列出所有已安裝的 Hotfix:

Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

此類別傳回的 Hotfix 清單看起來像這樣:

Description         : Update for Windows XP (KB910437)
FixComments         : Update
HotFixID            : KB910437
Install Date        :
InstalledBy         : Administrator
InstalledOn         : 12/16/2005
Name                :
ServicePackInEffect : SP3
Status              :

為了更簡化輸出,您或可排除某些屬性。儘管使用 Get-WmiObject Property 參數可以只選擇 HotFixID,但這樣做其實會傳回更多資訊,因為預設情況下將顯示所有的中繼資料:

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId
HotFixID         : KB910437
__GENUS          : 2
__CLASS          : Win32_QuickFixEngineering
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :

傳回額外的資料是因為 Get-WmiObject 的 Property 參數會限制由 WMI 類別執行個體所傳回的屬性,而不是限制回傳給 Windows PowerShell 的物件。若要減少輸出量,請使用 Select-Object

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot
FixId | Select-Object -Property HotFixId
HotFixId
--------
KB910437

列出作業系統版本資訊

Win32_OperatingSystem 類別屬性含有版本與 Service Pack 資訊。您可以明確地只選取這些屬性,從 Win32_OperatingSystem 取得版本資訊摘要:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

您也可以使用萬用字元搭配 Select-Object Property 參數。因為以 BuildServicePack 開頭的屬性全部與此處需要的資訊有關,所以您可以將命令簡寫為下列形式:

PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack*

BuildNumber             : 2600
BuildType               : Uniprocessor Free
OSType                  : 18
ServicePackMajorVersion : 2
ServicePackMinorVersion : 0

列出本機使用者與擁有者

經由選取 Win32_OperatingSystem 屬性可找出本機使用者一般資訊,包括授權使用者人數、目前使用者人數及擁有者名稱。您可以明示選取所要顯示的屬性,像這樣:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

使用萬用字元便可將上述命令簡化成:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*

取得可用的磁碟空間

使用 WMI Win32_LogicalDisk 類別可查看本機磁碟機的磁碟空間與可用空間。您只需要檢查 DriveType 等於 3 的執行個體;WMI 以此值代表固定式硬碟。

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName .

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 65541357568
Size         : 203912880128
VolumeName   : Local Disk

DeviceID     : Q:
DriveType    : 3
ProviderName :
FreeSpace    : 44298250240
Size         : 122934034432
VolumeName   : New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

取得登入工作階段資訊

透過 WMI Win32_LogonSession 類別可取得與使用者關聯的登入工作階段的一般相關資訊:

Get-WmiObject -Class Win32_LogonSession -ComputerName .

取得已登入電腦的使用者

使用 Win32_ComputerSystem 可顯示已登入特定電腦系統的使用者。下列命令僅顯示已登入系統桌面的使用者:

Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

取得電腦當地時間

使用 WMI Win32_LocalTime 類別可擷取特定電腦目前的當地時間。由於此類別預設顯示所有中繼資料,您或許可以使用 Select-Object 篩選輸出:

PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*


Day          : 15
DayOfWeek    : 4
Hour         : 12
Milliseconds :
Minute       : 11
Month        : 6
Quarter      : 2
Second       : 52
WeekInMonth  : 3
Year         : 2006

顯示服務狀態

如前所述,使用 Get-Service Cmdlet 即可檢視本機電腦上所有服務的狀態。對於遠端系統,您則可使用 WMI Win32_Service 類別。若您一併使用 Select-ObjectStatusNameDisplayName 篩選結果,輸出格式便與 Get-Service 的輸出幾乎完全相同:

Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

為了完整顯示若干名稱較長的服務名稱,您可以使用 Format-Table 搭配 AutoSizeWrap 參數調整最適欄寬,並將較長的名稱換行以免被截斷:

Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap




目錄