WMI 任务:计算机软件

计算机软件的 WMI 任务获取Microsoft Windows Installer(MSI)和软件版本安装的软件等信息。 有关其他示例,请参阅 techNet ScriptCenter at https://www.microsoft.com/technet

本主题中显示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅 连接到远程计算机上的 WMI

以下过程介绍如何运行脚本。

运行脚本

  1. 复制代码并将其保存在扩展名为 .vbs 的文件中,例如 filename.vbs。 确保文本编辑器不会向文件添加 .txt 扩展名。
  2. 打开命令提示符窗口并导航到保存文件的目录。
  3. 在命令提示符下键入 cscript filename.vbs
  4. 如果无法访问事件日志,请检查是否正在从提升的命令提示符运行。 某些事件日志(如安全事件日志)可能受用户访问控制(UAC)保护。

注意

默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可以生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt,将 filename.vbs 脚本的输出重定向到 outfile.txt

注意

运行“从 Win32_Product 中选择 *”查询可能会导致意外行为。 这是因为支持Win32_Product的提供程序未优化查询。 有关详细信息,请参阅 知识库文章974524

下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。

如何... WMI 类或方法
...使用脚本卸载软件? 如果使用 Microsoft Windows Installer(MSI)安装软件,请使用 WMI 类 Win32_Product卸载 方法。
VB
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

PowerShell
              
              $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

VB
              
              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

PowerShell
              
              $colSoftware = Get-WmiObject -Class Win32_Product

foreach ($colItem in $colSoftware) { "Name: " + $colItem.Name "Version: "+ $colItem.Version }

...确定安装了哪个版本的 Microsoft Office?

使用 Win32_Product 类并检查 Version 属性的值。

VB
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

PowerShell
              
              $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