WMI 任务:计算机软件
本文内容
计算机软件的 WMI 任务会获取 Microsoft Windows Installer (MSI) 安装的软件及软件版本等信息。 有关其他示例,请通过 https://www.microsoft.com/technet 访问 TechNet ScriptCenter。
本主题中所示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅连接到远程计算机上的 WMI 。
以下过程介绍了如何运行脚本。
运行脚本
复制代码并将其保存在扩展名为 .vbs 的文件中,例如 filename.vbs。 确保文本编辑器不会向该文件添加 .txt 扩展名。
打开命令提示符窗口并导航到保存该文件的目录。
在命令提示符下键入 cscript filename.vbs。
如果无法访问事件日志,请进行检查以查看是否正从提升的命令提示符运行。 某些事件日志(例如安全事件日志)可能受用户访问控制 (UAC) 的保护。
注意
默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可以生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt 以将 filename.vbs 脚本的输出重定向到 outfile.txt。
注意
运行“Select * from 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
}
示例
Powershell 远程 PC 信息脚本 PowerShell 代码示例使用许多硬件和软件类(包括 Win32Product)来查找有关使用 WMI 和远程注册表的远程 PC 的各种信息。
脚本和应用程序的 WMI 任务
WMI C++ 应用程序示例
TechNet ScriptCenter