若要从 WMI(在本地计算机或远程计算机上)获取数据,必须通过连接到特定命名空间来连接到 WMI 服务。 在大多数情况下,使用简写名字对象连接或定位符连接。 有关其他示例,请通过 https://www.microsoft.com/technet 访问 TechNet ScriptCenter。
进行远程连接时,需要正确设置 Windows 防火墙和 DCOM。 有关详细信息,请参阅连接到远程计算机上的 WMI 和通过 Windows 防火墙进行连接。 从 Windows Vista 开始,用户帐户控制 (UAC) 可能会影响 WMI 访问。 有关详细信息,请参阅用户帐户控制和 WMI。
本主题中所示的脚本示例仅从本地计算机获取数据。 有关如何使用脚本从远程计算机获取数据的详细信息,请参阅连接到远程计算机上的 WMI。
以下过程介绍了如何运行脚本。
运行脚本
- 复制代码并将其保存在扩展名为 .vbs 的文件中,例如 filename.vbs。 确保文本编辑器不会向该文件添加 .txt 扩展名。
- 打开命令提示符窗口并导航到保存该文件的目录。
- 在命令提示符下键入 cscript filename.vbs。
- 如果无法访问事件日志,请进行检查以查看是否正从提升的命令提示符运行。 某些事件日志(例如安全事件日志)可能受用户访问控制 (UAC) 的保护。
注意
默认情况下,cscript 会在命令提示符窗口中显示脚本的输出。 由于 WMI 脚本可以生成大量输出,因此可能需要将输出重定向到文件。 在命令提示符下键入 cscript filename.vbs > outfile.txt 以将 filename.vbs 脚本的输出重定向到 outfile.txt。
下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。
...使用 WMI 连接到远程计算机? |
指定以下项之一作为名字对象连接字符串的一部分:
- NetBIOS 计算机名称,例如“atl-dc-01”
- 完全限定的域名,例如“atl-dc-01.fabrikam.com”
- IPv4 地址,如“192.168.1.1”
- 从 Windows Vista 开始,如果目标计算机和要建立连接的计算机都运行 IPv6,则可以指定 IPv6 地址。
有关详细信息,请参阅连接到远程计算机上的 WMI 和 WMI 中的 IPv6 和 IPv4 支持。
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
|
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。
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
|
$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
`