about_Remote に関するページ

簡単な説明

PowerShell でリモート コマンドを実行する方法について説明します。

長い説明

一時的または永続的な接続を使用して、1 台のコンピューターまたは複数のコンピューターでリモート コマンドを実行できます。 1 台のリモート コンピューターで対話型セッションを開始することもできます。

このトピックでは、さまざまな種類のリモート コマンドを実行する方法を示す一連の例を示します。 これらの基本的なコマンドを試した後は、これらのコマンドで使用される各コマンドレットを説明するヘルプ トピックを参照してください。 このトピックでは、詳細を説明し、ニーズに合わせてコマンドを変更する方法について説明します。

注: 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 ベースの PowerShell リモート処理を使用しないので、PowerShell を実行している任意のコンピューターでこれらのコマンドレットの ComputerName パラメーターを使用できます。 コンピューターは 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 では永続的な接続が使用されます。この変数を使用する同じ PSSession で別のコマンド$pできます。 次のコマンドは、データベースに保存されたプロセスの数$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 コンピューターに 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 Sample.ps1 S2 コンピューターで次のスクリプトを実行します。

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

スクリプトの結果がローカル コンピューターに返されます。 ファイルをコピーする必要はない。

リモート コマンドを停止する方法

コマンドを中断するには、Ctrl + C キーを押します。 割り込み要求は、リモート コマンドを終了するリモート コンピューターに渡されます。

詳細情報

  • リモート処理のシステム要件については、リモート処理に関するページを about_Remote_Requirements

  • リモート出力の書式設定に関するヘルプについては、 リモート出力のabout_Remote_Output。

  • リモート処理のしくみ、リモート データの管理方法、特別な構成、セキュリティの問題、その他のよく寄せられる質問については、「 PowerShell リモート処理に関する FAQ」を参照してください。

  • リモート処理エラーの解決に関するヘルプについては、「 リモート処理エラーのabout_Remote_Troubleshooting。

  • PSSessions と永続的な接続の詳細については、次を参照about_PSSessions。

  • PowerShell のバックグラウンド ジョブの詳細については、PowerShell のバックグラウンド ジョブに関するページ about_Jobs

キーワード

about_Remoting

関連項目