次の方法で共有


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 の例とは異なり、偽装レベルは "偽装" プロパティによって設定されるため、モニカー文字列は必要ありません。 既定では、偽装レベルは 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 コマンドレットに送信されます。

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