使用 PowerShell 远程连接到 WMI

Windows PowerShell提供了一种简单机制,用于Windows远程 (WMI) 的 Management Instrumentation。 WMI 中的远程连接受 UAC Windows防火墙、DCOM 设置和用户帐户 () 。 有关配置远程连接的信息,请参阅连接到 WMI 远程启动 Windows Vista。

本主题中的示例基于远程计算机上连接到 WMI 中的VBScript。 本主题的所有示例都使用 Get-WmiObject cmdlet。 有关详细信息,请参阅 Get-WmiObject

Windows PowerShell示例

创建与远程计算机的连接时,用户可以指定连接信息,例如远程计算机名称、凭据和连接的身份验证级别。 以下示例演示如何使用不同的凭据集连接到远程计算机,以及如何访问 WMI 信息。

以下示例Windows PowerShell设置模拟级别:


Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -ComputerName Computer_B

在上一示例中,用户通过使用登录时 (和用户名) 连接到远程计算机。 用户还请求使用模拟。 与原始 VBScript 示例不同,不需要名字对象字符串,因为模拟级别由"Impersonation"属性设置。 默认情况下,模拟级别设置为 3 (模拟) 。

该示例列出了在远程计算机上运行的 Win32 _ Process 类的所有实例。

备注

应在远程计算机上指定要连接到的 WMI 命名空间,因为默认命名空间在不同计算机上可能不同。

以下示例Windows PowerShell使用不同的凭据连接到远程计算机,以及如何将模拟级别设置为 3,即 Impersonate:


$Computer = "atl-dc-01"

Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -Credential `
FABRIKAM\administrator -ComputerName $Computer

在上一示例中,计算机名称已分配给 $Computer 变量。 用户使用特定凭据连接到远程计算机, (和用户名) 身份验证级别请求模拟。

备注

表示换行符 ` () 重音字符。 它等效于 _ VBScript () 下划线字符。

以下示例Windows PowerShell创建远程计算机名称数组,然后在每台计算机上显示 即插即用 设备 (Win32 _ PnPEntity的实例)的名称,从而连接到同一域中的一组远程计算机:

$ArrComputers = "Computer1", "Computer2", "Computer3"
foreach ($Computer in $ArrComputers) 
{
write-host ""
write-host "===================================="
write-host "Computer: $Computer"
write-host "===================================="

write-host "-----------------------------------"
write-host "Win32_PnPEntity instance"
write-host "-----------------------------------"

$ColItems = Get-WmiObject -Class Win32_PnPEntity -Namespace "root\cimv2" -Computer $Computer
$ColItems[0..47] | Format-List Name, Status
}

备注

若要运行上述Windows PowerShell脚本,你必须是远程计算机上的管理员。 此外,与前面的示例相关,请注意以下事项:

  • 数组中的计算机名称必须用引号引起来,因为它们是字符串。
  • Get-WmiObject返回的对象将分配给 $ColItems 变量。
  • 范围运算符 [ ] 将设备即插即用限制为 48 个实例。 有关详细信息,请参阅关于 _ 运算符
  • "" | 是管道字符。 ColItems 返回的对象将发送到 Format-List cmdlet。

以下示例Windows PowerShell连接到其他域中的远程计算机。 此示例还显示远程计算机上 Win32 _ Process 实例的进程名称。

$Computer = "FullComputerName" 
$Domain = "DOMAIN"
$Credential = Get-Credential
$ColItems = Get-WmiObject -Class Win32_Process -Authority "ntlmdomain:$Domain" `
-Credential $Credential -Locale "MS_409" -Namespace "root\cimv2"  -ComputerName $Computer

foreach ($ObjItem in $colItems) 
{
write-host "Process Name:" $ObjItem.name
}

备注

若要运行上述Windows PowerShell脚本,你必须是远程计算机的管理员。

在上例中,用户连接到不同域上的远程计算机,并指定首选区域设置。 Get-Credential命令请求用户的凭据,并将凭据分配给对象。 该示例还列出了计算机上运行的 Win32 _ Process 类的实例的名称。

连接到远程计算机的 WMI