PowerShell を使用した WMI へのリモート接続

Windows PowerShell は、リモート コンピューター上の Windows Management Instrumentation (WMI) に接続するための簡単なメカニズムを提供します。 WMI のリモート接続は、Windows ファイアウォール、DCOM 設定、およびユーザー アカウント制御 (UAC) の影響を受けます。 リモート接続の構成の詳細については、Windows Vista 以降での WMI へのリモート接続に関する記事を参照してください。

このトピックの例は、「リモート コンピューター上の WMI への接続」の VBScript に基づいています。 このトピックのすべての例で、Get-WmiObject コマンドレットを使用します。 詳細については、「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
}

Note

上記の Windows PowerShell スクリプトを実行するには、リモート コンピューターの管理者である必要があります。 また、前の例に関連して、次の点に注意してください。

 

  • 配列内のコンピューター名は文字列であるため、引用符で囲む必要があります。
  • Get-WmiObject によって返されたオブジェクトは、$ColItems 変数に割り当てられます。
  • 範囲演算子 [] は、プラグ アンド プレイ デバイスの一覧を 48 個のインスタンスに制限しました。 詳細については、「about_Operators」を参照してください。
  • "|" はパイプライン文字です。 ColItems によって返されたオブジェクトは、Format-List コマンドレットに送信されます。

次の 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 への接続