about_WMI_Cmdlets

简短说明

提供有关 Windows Management Instrumentation (WMI) 和 Windows PowerShell 的背景信息。

长说明

本主题提供有关 WMI 技术、适用于 Windows PowerShell 的 WMI cmdlet、基于 WMI 的远程处理、WMI 加速器和 WMI 故障排除的信息。 本主题还提供指向有关 WMI 的详细信息的链接。

关于 WMI

Windows Management Instrumentation (WMI) 是 Microsoft 对基于 Web 的企业管理 (WBEM) 的实现,WBEM 是一项业界倡议,用于为访问企业环境中的管理信息开发一项标准技术。 WMI 使用通用信息模型 (CIM) 行业标准来表示系统、应用程序、网络、设备和其他托管组件。 CIM 由分布式管理任务组 (DMTF) 进行开发和维护。 可以使用 WMI 管理本地计算机和远程计算机。 例如,可以使用 WMI 执行以下操作:

  • 在远程计算机上启动进程。
  • 远程重启计算机。
  • 获取本地或远程计算机上安装的应用程序的列表。
  • 在本地或远程计算机上查询 Windows 事件日志。

适用于 WINDOWS POWERSHELL 的 WMI CMDLET

默认情况下,Windows PowerShell 会通过 Windows PowerShell 中提供的一组 cmdlet 实现 WMI 功能。 可以使用这些 cmdlet 完成管理本地和远程计算机所需的端到端任务。

包括以下 WMI cmdlet。

Cmdlet 说明
Get-WmiObject 获取 WMI 类的实例或
关于可用类的信息。
Invoke-WmiMethod 调用 WMI 方法。
Register-WmiEvent 订阅 WMI 事件。
Remove-WmiObject 删除 WMI 类和实例。
Set-WmiInstance 创建或修改 WMI 类的实例。

示例命令

以下命令可显示本地计算机的 BIOS 信息。

C:\PS> get-wmiobject win32_bios | format-list *

以下命令显示了三台远程计算机的 WinRM 服务的相关信息。

$wql = "select * from win32_service where name='WinRM'"
get-wmiobject -query $wql -computername server01, server01, server03

以下更复杂的命令将退出程序的所有实例。

C:\PS> notepad.exe
C:\PS> $wql = "select * from win32_process where name='notepad.exe'"
C:\PS> $np = get-wmiobject -query $wql
C:\PS> $np | remove-wmiobject

基于 WMI 的远程处理

虽然通过 WMI 管理本地系统的功能非常有用,但 WMI 的远程处理功能让它成为功能强大的管理工具。 WMI 使用 Microsoft 的分布式组件对象模型 (DCOM) 连接到系统并进行管理。 可能需要将某些系统配置为允许 DCOM 连接。 防火墙设置和锁定的 DCOM 权限可以阻止 WMI 远程管理系统的能力。

WMI 类型加速器

Windows PowerShell 包括 WMI 类型加速器。 与非类型加速器方法相比,使用这些 WMI 类型加速器(快捷方式),可以更直接地访问 WMI 对象。

WMI 支持以下类型加速器:

[WMISEARCHER] - 用于搜索 WMI 对象的快捷方式。

[WMICLASS] - 用于访问类的静态属性和方法的快捷方式。

[WMI] - 获取类的单个实例的快捷方式。

[WMISEARCHER] 是面向 ManagementObjectSearcher 的类型加速器。 它可以采用字符串构造函数来创建可随后对其执行 GET() 的搜索器。

例如:

PS> $s = [WmiSearcher]'Select * from Win32_Process where Handlecount > 1000'
PS> $s.Get() |sort handlecount |ft handlecount,__path,name -auto

count  __PATH                                              name
-----  ------                                              ----
1105   \\SERVER01\root\cimv2:Win32_Process.Handle="3724"   PowerShell...
1132   \\SERVER01\root\cimv2:Win32_Process.Handle="1388"   winlogon.exe
1495   \\SERVER01\root\cimv2:Win32_Process.Handle="2852"   iexplore.exe
1699   \\SERVER01\root\cimv2:Win32_Process.Handle="1204"   OUTLOOK.EXE
1719   \\SERVER01\root\cimv2:Win32_Process.Handle="1912"   iexplore.exe
2579   \\SERVER01\root\cimv2:Win32_Process.Handle="1768"   svchost.exe

[WMICLASS] 是面向 ManagementClass 的类型加速器。 此加速器包含的字符串构造函数采用了 WMI 类的本地或绝对 WMI 路径,并返回绑定到该类的对象。

例如:

PS> $c = [WMICLASS]"root\cimv2:WIn32_Process"
PS> $c |fl *
Name             : Win32_Process
__GENUS          : 1
__CLASS          : Win32_Process
__SUPERCLASS     : CIM_Process
__DYNASTY        : CIM_ManagedSystemElement
__RELPATH        : Win32_Process
__PROPERTY_COUNT : 45
__DERIVATION     : {CIM_Process, CIM_LogicalElement,
                   CIM_ManagedSystemElement}
__SERVER         : SERVER01
__NAMESPACE      : ROOT\cimv2
__PATH           : \\SERVER01\ROOT\cimv2:Win32_Process

[WMI] 是面向 ManagementObject 的类型加速器。 此加速器包含的字符串构造函数采用 WMI 实例的本地或绝对 WMI 路径,并返回绑定到该实例的对象。

例如:

PS> $p = [WMI]'\\SERVER01\root\cimv2:Win32_Process.Handle="1204"'
PS> $p.Name
OUTLOOK.EXE

WMI 故障排除

以下问题是尝试连接到远程计算机时可能发生的最常见问题。

问题 1:远程计算机未联机。

如果计算机处于脱机状态,则将无法使用 WMI 连接到计算机。 可能会收到以下错误消息:

Remote server machine does not exist or is unavailable

如果收到此错误消息,请验证计算机是否处于联机状态。 尝试 Ping 远程计算机。

问题 2:你在远程计算机上没有本地管理员权限。

要远程使用 WMI,必须在远程计算机上拥有本地管理员权限。 如果无权,将会拒绝访问该计算机。

要验证命名空间安全性,请:

  1. 单击“开始”,右键单击“我的电脑”,然后单击“管理”。
  2. 在“计算机管理”中,展开“服务和应用程序”,右键单击 WMI 控件,然后单击“属性”。
  3. 在 “WMI 控制属性” 对话框中,单击 “安全” 选项卡。

问题 3:防火墙阻止了对远程计算机的访问。

WMI 使用 DCOM(分布式 COM)和 RPC(远程过程调用)协议来遍历网络。 默认情况下,许多防火墙会阻止 DCOM 和 RPC 流量。 如果防火墙阻止了这些协议,则连接将失败。 例如,Microsoft Windows XP Service Pack 2 中的 Windows 防火墙配置为自动阻止所有未经请求的网络流量,包括 DCOM 和 WMI。 在其默认配置中,Windows 防火墙会拒绝传入的 WMI 请求,并且你会收到以下错误消息:

Remote server machine does not exist or is unavailable

另请参阅