リモート コマンドの実行

1 つの PowerShell コマンドを使用し、1 台から数百台のコンピューターでコマンドを実行できます。 Windows PowerShell は、WMI、RPC、WS-Management など、さまざまなテクノロジを使用してリモート コンピューティングをサポートします。

PowerShell は、WMI、WS-Management、SSH リモート処理をサポートしています。 PowerShell 7 以降では、RPC は Windows でのみサポートされています。

PowerShell でのリモート処理の詳細については、次の記事を参照してください。

構成なしの Windows PowerShell リモート処理

多くの Windows PowerShell コマンドレットには、1 台以上のリモート コンピューターのデータの収集や設定の変更が可能な ComputerName パラメーターがあります。 これらのコマンドレットは、さまざまな通信プロトコルを使用して、特別な構成を行わなくてもすべての Windows オペレーティング システム上で動作します。

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

通常、特別な構成なしでリモート処理をサポートするコマンドレットには ComputerName パラメーターがあり、Session パラメーターはありません。 セッションでこれらのコマンドレットを見つけるには、次のように入力します。

Get-Command | Where-Object {
    $_.Parameters.Keys -contains "ComputerName" -and
    $_.Parameters.Keys -notcontains "Session"
}

Windows PowerShell のリモート処理

Windows PowerShell リモート処理では、WS-Management プロトコルを使用して、1 台以上のリモート コンピューターで Windows PowerShell コマンドを実行できます。 永続的な接続の確立、対話型のセッションの開始、およびリモート コンピューターでのスクリプトの実行が可能です。

Windows PowerShell のリモート処理を使用するには、リモート管理のためにリモート コンピューターを構成する必要があります。 手順を含む詳細については、「about_Remote_Requirements」をご覧ください。

Windows PowerShell のリモート処理を構成すると、それ以降は、多くのリモート処理の戦略が使用可能になります。 この記事では、その一部のみを示します。 詳細については、「About Remote」(リモート処理について) を参照してください。

対話型セッションの開始

1 台のリモート コンピューターとの対話型セッションを開始するには、Enter-PSSession コマンドレットを使用します。 たとえば、Server01 リモート コンピューターと対話型セッションを開始するには、次のように入力します。

Enter-PSSession Server01

コマンド プロンプトの画面が更新され、リモート コンピューターの名前が表示されます。 プロンプトに入力されたコマンドはリモート コンピューターで実行され、結果はローカル コンピューターに表示されます。

対話型セッションを終了するには、次のように入力します。

Exit-PSSession

Enter-PSSessionExit-PSSession コマンドレットの詳細については、次を参照してください。

リモート コマンドの実行

1 台または複数のコンピューターでコマンドを実行するには、Invoke-Command コマンドレットを使用します。 たとえば、Get-UICulture コマンドをリモート コンピューター Server01 と Server02 で実行するには、次のように入力します。

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

コンピューターに出力が返されます。

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

スクリプトの実行

1 台または多数のリモート コンピューターでスクリプトを実行するには、Invoke-Command コマンドレットの FilePath パラメーターを使用します。 スクリプトがローカル コンピューターでアクセス可能でなければなりません。 結果はローカル コンピューターに返されます。

たとえば、次のコマンドは、リモート コンピューター Server01 と Server02 で DiskCollect.ps1 スクリプトを実行します。

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

永続的な接続の確立

New-PSSession コマンドレットを使用して、リモート コンピューター上に永続的なセッションを作成します。 次の例では、Server01 および Server02 上にリモート セッションを作成します。 セッション オブジェクトは、$s 変数に格納されます。

$s = New-PSSession -ComputerName Server01, Server02

セッションが確立されたので、それらで任意のコマンドを実行できます。 また、セッションは永続的であるため、1 つのコマンドからデータを収集して、別のコマンドでそのデータを利用できます。

たとえば、次のコマンドは $s 変数のセッションで Get-HotFix コマンドを実行し、結果を $h 変数に保存します。 $h 変数は $s のセッションごとに作成されますが、ローカル セッションには存在しません。

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

これで、同じセッション内の他のコマンドで、$h 変数のデータを使用できるようになりました。 結果はローカル コンピューターに表示されます。 次に例を示します。

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

高度なリモート処理

PowerShell には、次のことを行うコマンドレットが含まれています。

  • ローカル側とリモート側の両方からリモート セッションを構成して作成する
  • カスタマイズされた制限付きセッションを作成する
  • リモート セッションで実際に暗黙的に実行されるコマンドをリモート セッションからインポートする
  • リモート セッションのセキュリティを構成する

Windows の PowerShell には、WSMan プロバイダーが含まれています。 プロバイダーは、ローカル コンピューターとリモート コンピューターの構成設定の階層内を移動できる WSMAN: ドライブを作成します。

WSMan プロバイダーの詳細については、WSMan Provider (WSMan プロバイダー) および WS-Management コマンドレット関するページを参照するか、Windows PowerShell コンソールで Get-Help wsman と入力してください。

詳細については、以下を参照してください:

リモート処理のエラーに関するヘルプは、「about_Remote_Troubleshooting」をご覧ください。

参照