about_Remote

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

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 管理に基づく 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 { $_.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 コンピューター上の 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 パラメーターの値にすべてのコンピューター名を入力します。名前をコンマで区切ります。

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

about_Remote_Requirements

about_Remote_FAQ

about_Remote_TroubleShooting

about_Remote_Variables

Enter-PSSession

Invoke-Command

New-PSSession