Windows PowerShell のリモート処理機能を確認する

完了

リモート処理では、Web Services for Management (WS-Management または WS-MAN) と呼ばれるオープン標準プロトコルが使用されます。 名前が示すように、このプロトコルは、Web ブラウザーが Web サーバーとの通信に使用するのと同じ HTTP (HTTPS) プロトコルに基づいて構築されています。 これにより、プロトコルの管理とファイアウォール経由のルーティングが容易になります。 Windows オペレーティング システムでは、Windows リモート管理 (WinRM) サービスを使用してプロトコルが実装されます。 PowerShell では、WMI、WS-Management、Secure Shell (SSH) リモート処理がサポートされています。 PowerShell 6 では、リモート プロシージャ コール (RPC) ベースの通信はサポートされていません。 PowerShell 7 以降では、RPC は Windows でのみサポートされています。

受信接続を受信するコンピューターでリモート処理を有効にする必要がありますが、送信接続を開始するコンピューターでは構成は必要ありません。 PowerShell リモート処理は、現在サポートされているすべてのバージョンの Windows Server で受信接続に対して既定で有効になっています。 また、Windows PowerShell 3.0 以降を実行している任意のコンピューターで有効にすることもできます。

注意

リモート処理は Windows Server オペレーティング システムで既定で有効になっていますが、Windows 10 や Windows 11 などのクライアント オペレーティング システムでは既定では有効になっていません。

Windows PowerShell リモート処理では、他のアプリケーションの通信を管理できる WinRM が使用されています。 たとえば、既定の Windows Server 2016 以降のインストール環境で、WinRM では 64 ビット Windows PowerShell、32 ビット Windows PowerShell、および 2 つのサーバー マネージャー コンポーネントの通信が管理されます。

リモート処理アーキテクチャ

リモート処理は、WinRM サービスで開始します。 これにより、1 つ以上のリスナーが登録され、各リスナーによって HTTP または HTTPS 経由で受信トラフィックが受け入れられます。 各リスナーは、1 つのローカル IP アドレスまたは複数の IP アドレスにバインドできます。 Microsoft インターネット インフォメーション サービス (IIS) への依存はありません。つまり、WinRM を機能させるために IIS をインストールする必要はありません。

受信トラフィックには、トラフィックの目的の宛先、つまり "エンドポイント" を示すパケット ヘッダーが含まれます。 Windows PowerShell では、これらのエンドポイントは "セッション構成" とも呼ばれます。 各エンドポイントは、特定のアプリケーションに関連付けられています。 トラフィックがエンドポイントに送信されると、WinRM は関連付けられたアプリケーションを起動し、受信トラフィックを渡し、アプリケーションがそのタスクを完了するまで待機します。 アプリケーションはデータを WinRM に戻し、WinRM はデータを元のコンピューターに戻すことができます。

Windows PowerShell シナリオでは、WinRM にコマンドが送信され、これによりコマンドが実行されます。 プロセスは、リモート コンピューターのプロセスの一覧に Wsmprovhost として表示されます。 Windows PowerShell では次にこれらのコマンドが実行され、結果のオブジェクト (存在する場合) が XML に変換されます。 その後、XML テキスト ストリームが WinRM に返され、これによって元のコンピューターに送信されます。 リモート コンピューター上の Windows PowerShell では、XML が静的オブジェクトに変換されます。 これにより、コマンドの結果は、Windows PowerShell パイプライン内の他のオブジェクトと同様に動作可能になります。

Windows PowerShell では、複数のエンドポイントまたはセッション構成を WinRM に登録できます。 実際、64 ビット オペレーティング システムでは、既定で 64 ビット Windows PowerShell ホストと 32 ビット ホストの両方のエンドポイントが登録されます。 また、非常に詳細なアクセス許可と機能が割り当てられた独自のカスタム エンドポイントを作成することもできます。

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

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

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

  • コンピュータを再起動
  • Test-Connection
  • Clear-EventLog
  • Get-EventLog
  • Get-HotFix
  • Get-Process
  • Get-Service
  • Set-Service
  • Get-WinEvent
  • Get-WmiObject

通常、特別な構成なしでリモート処理をサポートするコマンドレットには ComputerName パラメーターがあり、 Session パラメーターはありません。

セッションでこれらのコマンドレットを見つけるには、次のように入力します。

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

SSH 経由の PowerShell リモート処理

PowerShell リモート処理では通常、接続交渉とデータ転送に WinRM が使用されます。 SSH が Linux および Windows のプラットフォームで利用可能になり、実際のマルチプラットフォームの PowerShell リモート処理を実行できます。

WinRM は PowerShell リモート処理セッションに堅牢なホスティング モデルを提供します。 SSH ベースのリモート処理では現在、リモート エンドポイント構成および JEA (Just Enough Administration) はサポートされていません。

SSH リモート処理では、Windows コンピューターと Linux コンピューターの間の基本的な PowerShell セッションのリモート処理が提供されます。 SSH リモート処理で、SSH サブシステムとしてターゲット コンピューター上に PowerShell ホスティング プロセスを作成します。 Microsoft では、エンドポイント構成と JEA をサポートするために、WinRM と同様の一般的なホスティング モデルを最終的に実装することを予定しています。

注意

New-PSSessionEnter-PSSession、および Invoke-Command コマンドレットに、この新しいリモート処理接続をサポートするための新しいパラメーターが設定されました。

SSH 経由で PowerShell リモート処理を使用するには、すべてのコンピューターに PowerShell 6 以降と SSH をインストールする必要があります。 次に、コンピューターとの間でリモート接続できるように、SSH クライアント (ssh.exe) とサーバー (sshd.exe) の両方の実行可能ファイルをインストールする必要があります。 OpenSSH for Windows は、Windows 10 ビルド 1809 と Windows Server 2019 以降で利用できます。 Linux の場合は、プラットフォームに適したバージョンの SSH (sshd.exe サーバーを含む) をインストールします。 また、SSH リモート処理機能を使用できるように、GitHub から PowerShell の現在のバージョンをインストールする必要があります。 SSH サーバーを構成して、リモート コンピューター上で PowerShell プロセスをホストする SSH サブシステムを作成する必要があります。 また、パスワードベースまたはキーベースの認証を有効にする必要もあります。