使用 PowerShell 远程连接到 WMI

Windows PowerShell 提供了一种简单机制,用于连接到远程计算机上的 Windows Management Instrumentation (WMI)。 WMI 中的远程连接受 Windows 防火墙、DCOM 设置和用户帐户控制 (UAC) 的影响。 有关配置远程连接的详细信息,请参阅从 Windows Vista 开始远程连接到 WMI

本主题中的示例基于连接到远程计算机上的 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(即模拟):


$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 个实例。 有关详细信息,请参阅 About_Operators
  • “|”是管道字符。 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