次の方法で共有


リモート コマンドの実行

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

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

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

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

多くの Windows PowerShell コマンドレットには ComputerName パラメーターがあり、1 台以上のリモート コンピューターでデータを収集し、設定を変更できます。 これらのコマンドレットは、さまざまな通信プロトコルを使用して、特別な構成を行わなくてもすべての 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 リモート処理を使用するには、リモート管理用にリモート コンピューターを構成する必要があります。 手順を含む詳細については、「 リモート要件について」を参照してください。

Windows PowerShell リモート処理を構成したら、多くのリモート処理戦略を利用できます。 この記事では、そのほんの一部を示します。 詳細については、「 リモートについて」を参照してください。

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

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

Enter-PSSession Server01

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

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

Exit-PSSession

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

リモート コマンドを実行する

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

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 パラメーターを使用します。 スクリプトはローカル コンピューター上にあるか、ローカル コンピューターからアクセスできる必要があります。 結果はローカル コンピューターに返されます。

たとえば、次のコマンドは、リモート コンピューターの 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 つのコマンドからデータを収集して、別のコマンドでそのデータを利用できます。

たとえば、次のコマンドは、Get-HotFix変数内のセッションで$s コマンドを実行し、結果を $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 プロバイダー 」および「 WS-Management コマンドレットについて」を参照するか、Windows PowerShell コンソールで「 Get-Help WSMan」と入力します。

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

リモート処理エラーのヘルプについては、about_Remote_Troubleshootingを参照してください。

こちらもご覧ください