使用 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 类的实例的名称。
相关主题