当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-WmiObject:查询本地和远程计算机上的 WMI

作者:精品下载站 日期:2024-12-14 12:38:01 浏览:14 分类:玩电脑

Get-WmiObject:查询本地和远程计算机上的 WMI


每当我们需要发现有关 Windows 计算机及其组件的任何信息时,我们都可以使用 Get-WmiObject 来实现。

不仅可以读取,通过利用 WMI 方法,Get-WmiObject 还可以在本地或远程系统上运行操作。此 cmdlet 是 PowerShell 中的几个 cmdlet 之一,可以与 WMI 存储库配合使用,使管理大量系统变得更加容易。

使用 Get-WmiObject 发现类

最基本的是,此 cmdlet 可以从本地计算机查询信息。您需要知道的只是命名空间(可能是默认的 root\cimv2)以及您要查找的信息所在的 WMI 类。

有数千个类,您可能还不知道要使用哪个类。使用Get-WmiObject,我们可以查询命名空间中的所有可用类。使用Get-WmiObject -List,您将能够查看root\cimv2命名空间中的所有类。如果您需要检查另一个命名空间中的类,您也可以随时使用 Namespace 参数。

PS> Get-WmiObject -List

NameSpace: ROOT\cimv2

Name				Methods	Properties
CIM_Indication		{}		{CorrelatedIndications, IndicationFilterName, IndicationIde...
CIM_ClassIndication	{}    	{ClassDefinition, CorrelatedIndications, IndicationFilterNa........

获取 WMI 属性

一旦您获得了该类,就可以调查并查看该类中有哪些属性。也许我想看看计算机正在运行什么操作系统。我可能正在构建一份报告,并希望了解远程计算机正在运行什么。 Get-WmiObject 有一个 ComputerName 参数,您可以在其中指定一台或多台远程计算机,而不是本地计算机。

我的远程计算机是一个名为 DC 的域控制器。我将查看 Win32_OperatingSystem 类,看看其中有哪些属性。

PS> Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 9600
RegisteredUser  : Windows User
SerialNumber    : 00252-00108-14656-AA864
Version         : 6.3.9600

这是有用的信息,但我没有看到操作系统名称。与许多其他 PowerShell 输出类似,您看不到所有属性。为此,我们必须使用 Select-Object 返回所有属性。

Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *

我现在可以看到一个名为 Caption 的属性,它让我知道 Windows 的版本。

PS> (Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *).Caption Microsoft Windows Server 2012 R2 Standard

查找 WMI 属性

如果您不是在寻找特定属性,而是在寻找与特定值匹配的属性,该怎么办?例如,我们可以查询 CIM_DataFile 类中的所有实例,但这将返回系统上的每个文件!相反,我们可以使用 FilterQuery 参数按值过滤实例。让我们回顾一下两者。

以 CIM_DataFile 为例,也许我只想查找代表压缩文件的实例。由于 Compressed 属性是每个实例的属性,并且它是一个布尔值,因此我可以使用 Filter 参数将过滤器直接发送到 WMI 提供程序,仅返回具有以下功能的实例: 压缩属性为True

Get-WmiObject -Class CIM_DataFile -Filter "Compressed = 'True'"

如果您了解 WQL,您还可以通过创建自己的 WQL 查询来选择类并自行指定“过滤器”。

Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Compressed = 'True'"

调用 WMI 方法

Get-WmiObject不仅可以从WMI读取信息,还可以方便调用WMI方法。调用的一种常见 WMI 方法是 Win32_Process 类上的 Create 方法。有几种不同的方法可以调用 WMI 方法,例如使用 Invoke-WmiMethod,但这也可以使用 Get-WmiObject 来完成。我们只需要捕获一个 WMI 实例,然后调用该对象的方法。

下面是在远程计算机上远程启动 notepad.exe 的示例。作为奖励,我们还使用备用凭证来执行此操作!

$cred = get-credential
$process = Get-WmiObject -Query "SELECT * FROM Meta_Class WHERE __Class = 'Win32_Process'" -namespace "root\cimv2" -computername 'FOO' -credential $cred $process.Create( "notepad.exe" )

WMI、DCOM 和 PowerShell 远程处理

最后需要指出的是,该 cmdlet 的后继者:Get-CimInstance。尽管 Get-CimInstance 确实比使用 PowerShell Remoting 作为默认远程连接协议提供了一些优势,但 Get-WmiObject 有时更易于使用。

Get-WmiObject 使用 DCOM 与远程计算机进行通信,并且通常也可用。否则,当您想要通过 WSMAN 使用 Get-CimInstance 时,您需要在远程端点上启用 PowerShell Remoting。

有关完整的详细信息,请查看 Microsoft 文档。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯