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 和 卸载 方法。
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