使用 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 範例,不需要 Moniker 字串,因為模擬層級是由 「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 個實例。 如需詳細資訊,請參閱 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