WMI 工作:計算機軟體
本文內容
計算機軟體的 WMI 工作會取得資訊,例如 Microsoft Windows Installer (MSI) 和軟體版本所安裝的軟體。 如需其他範例,請參閱 TechNet ScriptCenter at https://www.microsoft.com/technet 。
本主題中顯示的腳本範例只會從本機計算機取得數據。 如需如何使用腳本從遠端電腦取得數據的詳細資訊,請參閱 連線 遠端電腦上的 WMI。
下列程式描述如何執行腳本。
執行指令碼
複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs 。 請確定文字編輯器不會將 .txt 擴展名新增至檔案。
開啟命令提示字元視窗,並流覽至您儲存盤案的目錄。
在命令提示字元中輸入 cscript filename.vbs 。
如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者 存取控制 (UAC) 的保護。
注意
根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs outfile.txt,將 filename.vbs > 腳本的 輸出重新導向至 outfile.txt。
注意
執行「從Win32_Product選取 *」查詢可能會導致非預期的行為。 這是因為支援Win32_Product的提供者未優化查詢。 如需詳細資訊,請參閱 知識庫文章974524 。
下表列出可用來從本機計算機取得各種數據類型的腳本範例。
...使用腳本卸載軟體?
如果使用 Microsoft Windows Installer 安裝軟體(MSI),請使用 WMI 類別Win32_Product 和 Uninstall 方法。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product " _
& "Where Name = 'Personnel database'")
For Each objSoftware in colSoftware
objSoftware.Uninstall()
Next
$colSoftware = Get-WmiObject -Class Win32_Product |Where-Object {$_.name -eq “Personnel database”}
foreach ($colItem in $colSoftware)
{
$colItem.Uninstall()
}
...清查電腦上已安裝文本的所有軟體?
如果使用 Microsoft Windows Installer (MSI) 安裝軟體,請使用 WMI 類別 Win32_Product 。
strComputer = “.”Set objWMIService = GetObject(“winmgmts:” _ & “{impersonationLevel=impersonate}!\\” _ & strComputer & “\root\cimv2”) Set colSoftware = objWMIService.ExecQuery _ (“Select * from Win32_Product”)
For Each objSoftware in colSoftware
Wscript.Echo "Name: " & objSoftware.Name
Wscript.Echo "Version: " & objSoftware.Version
Next
$colSoftware = Get-WmiObject -Class Win32_Product
foreach ($colItem in $colSoftware)
{
"Name: " + $colItem.Name
"Version: "+ $colItem.Version
}
...判斷已安裝哪個版本的 Microsoft Office?
使用 Win32_Product 類別,並檢查 Version 屬性的值。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery(_
"Select * from Win32_Product " & _
"Where IdentifyingNumber =" _
& " '{90280409-6000-11D3-8CFE-0050048383C9}'")
For Each objItem in colSoftware
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Version: " & objItem.Version
Next
$colSoftware = Get-WmiObject -Class Win32_Product |Where-Object {$_.IdentifyingNumber -eq “{90280409-6000-11D3-8CFE-0050048383C9}”}
foreach ($colItem in $colSoftware)
{
"Name: " + $colItem.Name
"Version: " + $colItem.Version
}
腳本和應用程式的 WMI 工作
WMI C++ 應用程式範例
TechNet ScriptCenter