获取 WMI 对象 (Get-WmiObject)

Windows Management Instrumentation (WMI) 是 Windows 系统管理的核心技术,因为它可以按统一的方式公开各种类型的信息。由于 WMI 具有如此强大的功能,因此用于访问 WMI 对象的 Windows PowerShell cmdlet Get-WmiObject 为实际工作中最有用的命令之一。我们将讨论如何使用 Get-WmiObject 来访问 WMI 对象,然后讨论如何使用 WMI 对象来执行特定操作。

列出 WMI 类

大多数 WMI 用户遇到的第一个问题是:希望了解利用 WMI 可以执行哪些操作。WMI 类可以描述可管理的资源。系统中存在几百个 WMI 类,其中某些类包含几十个属性。

Get-WmiObject 可以通过使 WMI 可发现来解决此问题。您可以通过键入以下命令来获取本地计算机中可用的 WMI 类列表:

PS> Get-WmiObject -List


__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

通过使用 ComputerName 参数,然后指定计算机名称或 IP 地址,可以从远程计算机中检索相同的信息:

PS> Get-WmiObject -List -ComputerName 192.168.1.29


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

根据该计算机所运行的特定操作系统和由已安装的应用程序所添加的特定 WMI 扩展的不同,远程计算机返回的类列表也各不相同。

注意:

在使用 Get-WmiObject 连接到远程计算机时,该远程计算机必须运行 WMI,并且,在默认配置下,您使用的帐户必须是该远程计算机上本地管理员组的成员。远程系统不需要安装 Windows PowerShell。从而,您可以对未运行 Windows PowerShell 但可使用 WMI 的操作系统进行管理。

甚至可在连接到本地系统时包括 ComputerName。可以将本地计算机的名称、其 IP 地址(或环回地址 127.0.0.1)或 WMI 样式“.”用作计算机名称。如果名为 Admin01(其 IP 地址为 192.168.1.90)的计算机上运行的是 Windows PowerShell,则以下命令将返回该计算机的 WMI 类列表:

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

默认情况下,Get-WmiObject 使用 root/cimv2 命名空间。如果要指定另一个 WMI 命名空间,请使用 Namespace 参数并指定相应的命名空间路径:

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

显示 WMI 类详细信息

如果您已经知道 WMI 类的名称,则可立即使用该类来获取信息。例如,Win32_OperatingSystem 是常用于检索计算机相关信息的 WMI 类之一。

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .


SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

尽管我们已给出所有参数,但也可采用更简洁的方式来表示命令。连接到本地系统时,ComputerName 参数不是必需的。介绍该参数的目的是为了对最常见的情况予以说明,并帮助您熟悉此参数。Namespace 默认为 root/cimv2,而且也可以省略。最后,大多数 cmdlet 都允许省略一些通用参数名称。在使用 Get-WmiObject 时,如果没有为第一个参数指定名称,则 Windows PowerShell 会将其视为 Class 参数。这意味着可能已通过键入以下命令发出上一命令:

Get-WmiObject Win32_OperatingSystem

Win32_OperatingSystem 类所具有的属性数量远远超过此处所显示的属性数量。可以使用 Get-Member 来查看所有属性。就像其他对象属性一样,WMI 类的属性也将自动可用:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

使用 Format Cmdlet 显示非默认的属性

如果需要包含在 Win32_OperatingSystem 类中且默认情况下不显示的信息,可通过使用 Format cmdlet 来显示这些信息。例如,如果希望显示可用的内存数据,请键入:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
注意:

通配符可与 Format-Table 中的属性名称一起使用,因此最后的管道元素可精简为 Format-Table -Property TotalV*,Free*

如果通过键入以下命令将内存数据的格式设置为列表,则将大大提高该内存数据的可读性:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles


TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644




目录