リモートについて
概要
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リモート処理を使用しないため、Windows PowerShellを実行している任意のコンピューターでこれらのコマンドレットの ComputerName パラメーターを使用できます。 コンピューターは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 Stop-Computer
Get-WinEvent Test-Connection
Get-WmiObject Write-EventLog
たとえば、次のコマンドは、Server01 リモート コンピューター上のサービスを取得します。
Get-Service -ComputerName Server01
通常、特別な構成なしでリモート処理をサポートするコマンドレットには ComputerName パラメーターがあり、 Session パラメーターはありません。 セッションでこれらのコマンドレットを見つけるには、次のように入力します。
Get-Command | Where-Object {
$_.Parameters.Keys -contains 'ComputerName' -and
$_.Parameters.Keys -notcontains 'Session'
}
リモート コマンドを実行する方法
リモート コンピューターで他のコマンドを実行するには、Invoke-Command コマンドレットを使用します。
1 つのコマンドまたは関連のないコマンドを実行するには、Invoke-Command の ComputerName パラメーターを使用してリモート コンピューターを指定します。 コマンドを指定するには、ScriptBlock パラメーターを使用します。
たとえば、次のコマンドは Server01 コンピューターで Get-Culture コマンドを実行します。
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}
ComputerName パラメーターは、1 つまたは複数のコンピューターで 1 つのコマンドまたは関連のない複数のコマンドを実行する状況向けに設計されています。 リモート コンピューターへの永続的な接続を確立するには、Session パラメーターを使用します。
永続的な接続 (PSSESSION) を作成する方法
Invoke-Command コマンドレットの ComputerName パラメーターを使用すると、Windows PowerShellコマンド専用の接続が確立されます。 そのため、コマンドが完了すると接続を閉じます。 コマンドで定義されている変数または関数はすべて失われます。
リモート コンピューターへの永続的な接続を作成するには、New-PSSession コマンドレットを使用します。 たとえば、次のコマンドは、Server01 および Server02 コンピューターに PSSessions を作成し、PSSessions を $s 変数に保存します。
$s = New-PSSession -ComputerName Server01, Server02
PSSESSION でコマンドを実行する方法
PSSession を使用すると、関数、エイリアス、変数の値など、データを共有する一連のリモート コマンドを実行できます。 PSSession でコマンドを実行するには、Invoke-Command コマンドレットの Session パラメーターを使用します。
たとえば、次のコマンドでは、Invoke-Command コマンドレットを使用して、Server01 および Server02 コンピューターの PSSessions で 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 パラメーターの値にすべてのコンピューター名を入力します。 名前はコンマで区切ります。
たとえば、次のコマンドは、3 台のコンピューターで Get-Culture コマンドを実行します。
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}
複数の PSSession でコマンドを実行することもできます。 次のコマンドは、Server01、Server02、および Server03 コンピューターに PSSessions を作成し、各 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