about_Remote

簡単な説明

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

詳細な説明

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

Note

PowerShell リモート処理を使用するには、リモート処理用にローカル コンピューターとリモート コンピューターを構成する必要があります。 詳細については、「about_Remote_Requirements」を参照してください

対話型セッションを開始する方法

リモート コマンドを実行する最も簡単な方法は、リモート コンピューターとの対話型セッションを開始することです。

セッションが開始されると、入力したコマンドは、リモート コンピューターで直接入力したかのように、リモート コンピューター上で実行されます。 各対話型セッションで接続できるコンピューターは 1 つだけです。

対話型セッションを開始するには、コマンドレットを Enter-PSSession 使用します。 次のコマンドは、Server01 コンピューターとの対話型セッションを開始します。

Enter-PSSession Server01

PowerShell は、リモート コンピューターの名前を含むようにコマンド プロンプトを変更します。

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 つのコマンドまたは関連のないコマンドをいくつか実行するには、ComputerName パラメーターInvoke-Command使用してリモート コンピューターを指定します。 ScriptBlock パラメーターを使用してコマンドを指定します。

たとえば、次のコマンドは Server01 コンピューターでコマンドを実行 Get-Culture します。

Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}

永続的な接続を作成する方法

コマンドレットの ComputerName パラメーターをInvoke-Command使用すると、PowerShell によってリモート コンピューターへの一時的な接続が確立されます。 コマンドが完了すると、接続が閉じます。 この一時セッションで定義されている変数または関数はすべて失われます。

リモート コンピューターへの永続的な接続を作成するには、コマンドレットを New-PSSession 使用します。 たとえば、次のコマンドは、Server01 コンピューターと Server02 コンピューターに PSSession を作成し、PSSession を変数に $s 保存します。

$s = New-PSSession -ComputerName Server01, Server02

PSSession でコマンドを実行する方法

PSSession を使用すると、関数、エイリアス、変数の値などのデータを共有する一連のリモート コマンドを実行できます。 PSSession でコマンドを実行するには、コマンドレットの Session パラメーターを Invoke-Command 使用します。

たとえば、次のコマンドでは、このコマンドレットを使用 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}

複数のコンピューターでリモート コマンドを実行する方法

複数のコンピューターでリモート コマンドを実行するには、ComputerName パラメーターの値にすべてのコンピューター名を入力しますInvoke-Command。 名前はコンマで区切ります。

たとえば、次のコマンドは、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}

リモート コンピューターでスクリプトを実行する方法

リモート コンピューターでローカル スクリプトを実行するには、次の FilePath パラメーターInvoke-Command使用します。 ファイルをコピーする必要はありません。 たとえば、次のコマンドは Sample.ps1 、S1 および S2 コンピューターでスクリプトを実行します。

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

PowerShell は、スクリプトの結果をローカル コンピューターに返します。

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

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

詳細情報

関連項目