トピック about_Remote 簡易説明 Windows PowerShell でリモート コマンドを実行する方法について説明します。 詳細説明 一時接続または固定接続を使用して、1 台のコンピューターまたは複数のコンピューター上でリモート コマンドを実行できます。1 台のリモート コンピューターと対話型のセッションを開始することもできま す。 ここでは、さまざまなリモート コマンドの実行方法を示す一連の例を紹介します。これらの基本的なコ マンドを試してみた後で、そのコマンド内で使用される各コマンドレットに関するヘルプ トピックをお 読みください。これらのトピックには、コマンドレットの詳細と、ニーズに合わせてコマンドを変更する 方法が示されています。 注: Windows PowerShell リモート処理を使用するには、ローカル コンピューターおよびリモート コンピューターをリモート処理用に構成する必要があります。詳細については、 「about_Remote_Requirements」を参照してください。 対話型のセッションを開始する方法 (ENTER-PSSESSION) リモート コマンドを実行するための最も簡単な方法は、リモート コンピューターとの対話型セッショ ンを開始することです。 セッションが開始されると、リモート コンピューターで直接入力した場合と同様に、入力したコマンド がリモート コンピューターで実行されます。各対話型セッションでは、1 台のコンピューターにのみ接 続できます。 対話型のセッションを開始するには、Enter-PSSession コマンドレットを使用します。次のコマンド を実行すると、Server01 コンピューターとの対話型のセッションが開始されます。 enter-pssession server01 コマンド プロンプトが変わり、Server01 コンピューターに接続していることが示されます。 Server01\PS> これで、コマンドを Server01 コンピューター上で入力することができます。 対話型のセッションを終了するには、次のように入力します。 exit-pssession 詳細については、「Enter-PSSession」を参照してください。 ComputerName パラメーターを持つコマンドレットを使用してリモート データを取得する方法 一部のコマンドレットには、リモート コンピューターからオブジェクトを取得するための ComputerName パラメーターがあります。 このようなコマンドレットは WS-Management ベースの Windows PowerShell リモート処理を使用しな いので、その ComputerName パラメーターは、Windows PowerShell を実行しているどのコンピューター でも使用できます。したがって、コンピューターを Windows PowerShell リモート処理用に構成する 必要はありません。また、コンピューターがリモート処理を行ううえで必要なシステム要件を満たして いる必要もありません。 次のコマンドレットには、ComputerName パラメーターがあります。 Clear-EventLog Limit-EventLog Get-Counter New-EventLog Get-EventLog Remove-EventLog Get-HotFix Restart-Computer Get-Process Show-EventLog Get-Service Show-Service Get-WinEvent Stop-Computer Get-WmiObject Write-EventLog たとえば、次のコマンドでは、Server01 リモート コンピューター上のサービスを取得できます。 get-service -computername server01 一般的に、特別な構成が不要なリモート処理をサポートするコマンドレットには ComputerName パラメーターがあり、Session パラメーターはありません。このようなコマンドレットをセッション 内で検索するには、次のように入力します。 get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"} リモート コマンドの実行方法 リモート コンピューターで他のコマンドを実行するには、Invoke-Command コマンドレットを使用し ます。 1 つのコマンドまたはいくつかの無関係のコマンドを実行するには、Invoke-Command の ComputerName パラメーターを使用して、リモート コンピューターを指定します。また、ScriptBlock パラメーターを使用してコマンドを指定します。 たとえば、次のコマンドは、Get-Culture コマンドを Server01 コンピューター上で実行します。 invoke-command -computername Server01 -scriptblock {get-culture} ComputerName パラメーターは、1 台または多数のコンピューター上で 1 つのコマンドまたはいくつ かの無関係のコマンドを実行する場合に使用します。 リモート コンピューターへの固定接続を確立するには、Session パラメーターを使用します。 固定接続 (PSSession) を作成する方法 Invoke-Command コマンドレットの ComputerName パラメーターを使用すると、Windows PowerShell は コマンドを実行するための接続を確立します。コマンドが完了すると、接続は閉じます。コマンドで定義 されていた変数や関数は、すべて削除されます。 リモート コンピューターへの固定接続を作成するには、New-PSSession コマンドレットを使用しま す。たとえば、次のコマンドを実行すると、Server01 および Server02 コンピューター上に PSSession が作成され、その PSSession が $s 変数に保存されます。 $s = new-pssession -computername Server01, Server02 PSSession でコマンドを実行する方法 PSSession では、関数、エイリアス、変数の値などのデータを共有する一連のリモート コマンドを実行で きます。 PSSession でコマンドを実行するには、Invoke-Command コマンドレットの Session パラメーターを使用 します。 たとえば次のコマンドは、Invoke-Command コマンドレットを使用して、Server01 および Server02 コン ピューター上の PSSession で Get-Process コマンドを実行します。このコマンドは、各 PSSession で $p 変数にプロセスを保存します。 invoke-command -session $s -scriptblock {$p = get-process} PSSession では固定接続を使用するので、$p 変数を使用する同じ PSSession で別のコマンドを実行でき ます。 次のコマンドは、$p に保存されているプロセスの数をカウントします。 invoke-command -session $s -scriptblock {$p.count} 複数のコンピューター上でリモート コマンドを実行する方法 複数のコンピューター上でリモート コマンドを実行するには、Invoke-Command の ComputerName パ ラメーターの値にすべてのコンピューター名を入力します。名前はコンマで区切ります。 たとえば、次のコマンドは、Get-Culture コマンドを 3 台のコンピューター上で実行します。 invoke-command -computername S1, S2, S3 -scriptblock {get-culture} 複数の PSSession で 1 つのコマンドを実行することもできます。次のコマンドを実行すると、 Server01、Server02、Server03 の各コンピューター上に PSSession が作成され、各 PSSession で Get-Culture コマンドが実行されます。 $s = new-pssession -computername S1, S2, S3 invoke-command -session $s -scriptblock {get-culture} ローカル コンピューターの一覧を含めるには、ローカル コンピューターの名前、ドット (.)、または 「localhost」を入力します。 invoke-command -computername S1, S2, S3, localhost -scriptblock {get-culture} リモート コンピューター上でスクリプトを実行する方法 リモート コンピューター上でローカル スクリプトを実行するには、Invoke-Command の FilePath パラ メーターを使用します。 たとえば、次のコマンドは、S1 および S2 コンピューター上で Sample.ps1 スクリプトを実行します。 invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1 スクリプトの結果は、ローカル コンピューターに返されます。ファイルをコピーする必要はありませ ん。 リモート コマンドを停止する方法 コマンドを停止するには、Ctrl キーを押しながら C キーを押します。停止要求がリモート コンピュータ ーに渡され、リモート コマンドが停止されます。 詳細情報 -- リモート処理を行ううえで必要なシステム要件については、「about_Remote_Requirements」を 参照してください。 -- リモート出力のフォーマットのヘルプについては、「about_Remote_Output」を参照してくださ い。 -- リモート処理のしくみ、リモート データの管理方法、特別な構成、セキュリティ上の問題、その他 のよく寄せられる質問については、「about_Remote_FAQ」を参照してください。 -- リモート処理エラーの解決に役立つヘルプについては、「about_Remote_Troubleshooting」を 参照してください。 -- PSSession と固定接続については、「about_PSSessions」を参照してください。 -- Windows PowerShell のバックグラウンド ジョブについては、「about_Jobs」を参照してくだ さい。 キーワード about_Remoting 関連項目 about_PSSessions about_Remote_Requirements about_Remote_FAQ about_Remote_TroubleShooting Enter-PSSession Invoke-Command New-PSSession