WMI 任务:连接到 WMI 服务

若要从 WMI(在本地计算机或远程计算机上)获取数据,必须通过连接到特定命名空间来连接到 WMI 服务。 在大多数情况下,使用简写名字对象连接或定位符连接。 有关其他示例,请通过 https://www.microsoft.com/technet 访问 TechNet ScriptCenter。

进行远程连接时,需要正确设置 Windows 防火墙和 DCOM。 有关详细信息,请参阅连接到远程计算机上的 WMI通过 Windows 防火墙进行连接。 从 Windows Vista 开始,用户帐户控制 (UAC) 可能会影响 WMI 访问。 有关详细信息,请参阅用户帐户控制和 WMI

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

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

运行脚本

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

注意

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

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

如何实现... WMI 类或方法
...使用 WMI 连接到远程计算机? 指定以下项之一作为名字对象连接字符串的一部分:
  • NetBIOS 计算机名称,例如“atl-dc-01”
  • 完全限定的域名,例如“atl-dc-01.fabrikam.com”
  • IPv4 地址,如“192.168.1.1”
  • 从 Windows Vista 开始,如果目标计算机和要建立连接的计算机都运行 IPv6,则可以指定 IPv6 地址。
有关详细信息,请参阅连接到远程计算机上的 WMIWMI 中的 IPv6 和 IPv4 支持
VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
strComputer = "atl-dc-01"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" | format-list -Property Name
...以备用凭据运行 WMI 脚本?

使用 SWbemLocator.ConnectServer 方法(或在 C++ 中使用 IWbemLocator::ConnectServer)并包含相应的用户名和密码。 连接到本地计算机时,无法更改凭据。 有关详细信息,请参阅创建 WMI 脚本连接到远程计算机上的 WMI

VB
strComputer = "atl-dc-01"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer (strComputer, "root\cimv2", "fabrikam\administrator", "password")
Set colProcessList = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
$StrComputer = "atl-dc-01"
$strCredentials = "FABRIKAM\administrator"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" -credential $strCredentials `
   -Impersonation Impersonate | format-list -Property Name

脚本和应用程序的 WMI 任务

WMI C++ 应用程序示例

TechNet ScriptCenter

`