リモート コマンドの実行Running Remote Commands

1 つの PowerShell コマンドを使用し、1 台から数百台のコンピューターでコマンドを実行できます。You can run commands on one or hundreds of computers with a single PowerShell command. Windows PowerShell は、WMI、RPC、WS-Management など、さまざまなテクノロジを使用してリモート コンピューティングをサポートします。Windows PowerShell supports remote computing by using various technologies, including WMI, RPC, and WS-Management.

PowerShell Core では、WMI、WS-Management、および SSH リモート処理をサポートしています。PowerShell Core supports WMI, WS-Management, and SSH remoting. RPC のサポートは終了しました。RPC is no longer supported.

PowerShell Core でのリモート処理の詳細については、次の記事を参照してください。For more information about remoting in PowerShell Core, see the following articles:

構成なしでの Windows PowerShell リモート処理Windows PowerShell Remoting Without Configuration

多くの Windows PowerShell コマンドレットは、1 台以上のリモート コンピューターのデータの収集や設定の変更が可能な ComputerName パラメーターを持っています。Many Windows PowerShell cmdlets have the ComputerName parameter that enables you to collect data and change settings on one or more remote computers. これらのコマンドレットは、さまざまな通信プロトコルを使用して、特別な構成を行わなくてもすべての Windows オペレーティング システム上で動作します。These cmdlets use varying communication protocols and work on all Windows operating systems without any special configuration.

これらのコマンドレットには、次のものがあります。These cmdlets include:

通常、特別な構成なしでリモート処理をサポートするコマンドレットは、ComputerName パラメーターを指定し、Session パラメーターは必要ありません。Typically, cmdlets that support remoting without special configuration have the ComputerName parameter and don't have the Session parameter. セッションでこれらのコマンドレットを見つけるには、次のように入力します。To find these cmdlets in your session, type:

Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

Windows PowerShell のリモート処理Windows PowerShell Remoting

Windows PowerShell リモート処理では、WS-Management プロトコルを使用して、1 台以上のリモート コンピューターで Windows PowerShell コマンドを実行できます。Using the WS-Management protocol, Windows PowerShell remoting lets you run any Windows PowerShell command on one or more remote computers. 永続的な接続の確立、対話型のセッションの開始、およびリモート コンピューターでのスクリプトの実行が可能です。You can establish persistent connections, start interactive sessions, and run scripts on remote computers.

Windows PowerShell のリモート処理を使用するには、リモート管理のためにリモート コンピューターを構成する必要があります。To use Windows PowerShell remoting, the remote computer must be configured for remote management. 手順を含む詳細については、「about_Remote_Requirements」をご覧ください。For more information, including instructions, see About Remote Requirements.

Windows PowerShell のリモート処理を構成すると、それ以降は、多くのリモート処理の戦略が使用可能になります。Once you have configured Windows PowerShell remoting, many remoting strategies are available to you. この記事では、その一部のみを示します。This article lists just a few of them. 詳細については、「About Remote」(リモート処理について) を参照してください。For more information, see About Remote.

対話型セッションの開始Start an Interactive Session

1 台のリモート コンピューターとの対話型セッションを開始するには、Enter-PSSession コマンドレットを使用します。To start an interactive session with a single remote computer, use the Enter-PSSession cmdlet. たとえば、Server01 リモート コンピューターと対話型セッションを開始するには、次のように入力します。For example, to start an interactive session with the Server01 remote computer, type:

Enter-PSSession Server01

コマンド プロンプトの画面が更新され、リモート コンピューターの名前が表示されます。The command prompt changes to display the name of the remote computer. プロンプトに入力されたコマンドはリモート コンピューターで実行され、結果はローカル コンピューターに表示されます。Any commands that you type at the prompt run on the remote computer and the results are displayed on the local computer.

対話型セッションを終了するには、次のように入力します。To end the interactive session, type:

Exit-PSSession

Enter-PSSession コマンドレットおよび Exit-PSSession コマンドレットの詳細については、次を参照してください。For more information about the Enter-PSSession and Exit-PSSession cmdlets, see:

リモート コマンドの実行Run a Remote Command

1 台または複数のコンピューターでコマンドを実行するには、Invoke-Command コマンドレットを使用します。To run a command on one or more computers, use the Invoke-Command cmdlet. たとえば、Get-UICulture コマンドをリモート コンピューター Server01 と Server02 で実行するには、次のように入力します。For example, to run a Get-UICulture command on the Server01 and Server02 remote computers, type:

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

コンピューターに出力が返されます。The output is returned to your computer.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

スクリプトの実行Run a Script

1 台または多数のリモート コンピューターでスクリプトを実行するには、Invoke-Command コマンドレットの FilePath パラメーターを使用します。To run a script on one or many remote computers, use the FilePath parameter of the Invoke-Command cmdlet. スクリプトがローカル コンピューターでアクセス可能でなければなりません。The script must be on or accessible to your local computer. 結果はローカル コンピューターに返されます。The results are returned to your local computer.

たとえば、次のコマンドは、リモート コンピューター Server01 と Server02 で DiskCollect.ps1 スクリプトを実行します。For example, the following command runs the DiskCollect.ps1 script on the remote computers, Server01 and Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1

永続的な接続の確立Establish a Persistent Connection

New-PSSession コマンドレットを使用して、リモート コンピューター上に永続的なセッションを作成します。Use the New-PSSession cmdlet to create a persistent session on a remote computer. 次の例では、Server01 および Server02 上にリモート セッションを作成します。The following example creates remote sessions on Server01 and Server02. セッション オブジェクトは、$s 変数に格納されます。The session objects are stored in the $s variable.

$s = New-PSSession -ComputerName Server01, Server02

セッションが確立されたので、それらで任意のコマンドを実行できます。Now that the sessions are established, you can run any command in them. また、セッションは永続的であるため、1 つのコマンドからデータを収集して、別のコマンドでそのデータを利用できます。And because the sessions are persistent, you can collect data from one command and use it in another command.

たとえば、次のコマンドは $s 変数のセッションで Get-HotFix コマンドを実行し、結果を $h 変数に保存します。For example, the following command runs a Get-HotFix command in the sessions in the $s variable and it saves the results in the $h variable. $h 変数は $s のそれぞれのセッションで作成されますが、ローカル セッションには存在しません。The $h variable is created in each of the sessions in $s, but it doesn't exist in the local session.

Invoke-Command -Session $s {$h = Get-HotFix}

これで、同じセッション内の他のコマンドで、$h 変数のデータを使用できるようになりました。Now you can use the data in the $h variable with other commands in the same session. 結果はローカル コンピューターに表示されます。The results are displayed on the local computer. たとえば、次のように入力します。For example:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}

高度なリモート処理Advanced Remoting

Windows PowerShell のリモート管理はこれだけではありません。Windows PowerShell remote management just begins here. Windows PowerShell と共にインストールされるコマンドレットを使用して、ローカルとリモートの両側からのリモート セッションの確立と構成、カスタマイズおよび制限されたセッションの作成、リモート セッションで実際に暗黙的に実行されるコマンドのリモート セッションからのユーザーによるインポート、リモート セッションのセキュリティの構成など、さまざまな処理を実行できます。By using the cmdlets installed with Windows PowerShell, you can establish and configure remote sessions both from the local and remote ends, create customized and restricted sessions, allow users to import commands from a remote session that actually run implicitly on the remote session, configure the security of a remote session, and much more.

Windows PowerShell には、WSMan プロバイダーが含まれています。Windows PowerShell includes a WSMan provider. プロバイダーは、ローカル コンピューターとリモート コンピューターの構成設定の階層内を移動できる WSMAN: ドライブを作成します。The provider creates a WSMAN: drive that lets you navigate through a hierarchy of configuration settings on the local computer and remote computers.

WSMan プロバイダーの詳細については、WSMan Provider (WSMan プロバイダー) および WS-Management コマンドレット関するページを参照するか、Windows PowerShell コンソールで Get-Help wsman と入力してください。For more information about the WSMan provider, see WSMan Provider and About WS-Management Cmdlets, or in the Windows PowerShell console, type Get-Help wsman.

詳細については、次のドキュメントをご覧ください。For more information, see:

リモート処理のエラーに関するヘルプは、「about_Remote_Troubleshooting」をご覧ください。For help with remoting errors, see about_Remote_Troubleshooting.

参照See Also