使用 PowerShell 远程连接到 WMI

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

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

Windows PowerShell示例

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

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


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

在前面的示例中,用户使用 (域和用户名) 登录的相同凭据连接到远程计算机。 用户还请求使用模拟。 与原始 VBScript 示例不同,不需要名字对象字符串,因为模拟级别由“模拟”属性设置。 默认情况下,模拟级别设置为 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