WinRMおよびPowerShellリモート操作は、リモートのWindowsコンピュータを管理する際に重要な機能です。他のサービスと同様に、WinRMは特定のポートで特定の状況下で待ち受けます。このチュートリアルでは、それらのWinRMポートを学び、必要に応じて変更する方法を学びます。
WinRMリスナー
WinRM(およびその実行ポート)の最も重要な部分の1つは、WinRMリスナーです。
WinRMリスナーは、本質的にはWebサーバーです。HTTPとHTTPSで通信し、Windows 7以前の時代では、ほとんどのWebサーバーが使用するポート80と443がデフォルトで使用されていたことさえありました。
リスナーは、通常のWebサーバーと同様に、接続の確立を試みるための待機中のコンピュータ上でサービスとして実行されます。
A WinRm listener can listen two different ways; HTTP or HTTPS. The WinRM port for HTTP is 5985 while the WinRm port for HTTPS is 5986, by default.
- HTTP – ポート5985
- HTTPS – ポート5986
間違ったポートへの接続エラー
ポートを変更した場合には、ファイアウォールのルールを追加しないと、ポートを指定しても同じメッセージが表示されます。
WinRMポートの変更
Microsoftは互換性と使いやすさのためにデフォルトの待ち受けポートを使用することを推奨していますが、必要に応じて変更することもできます。これは、デフォルトのポートとの競合や、ファイアウォールによるこれらのポートの使用の制限がある場合に役立ちます。
おそらく、カスタムポートを介してWinRMに接続するように構成されたシステムがあります。通常通りに接続しようとすると、次のエラーメッセージが表示されます:

その場合、サーバー側でWinRMポートを変更する必要があります!
WinRmポートを変更するには、まずそのポートで既にリッスンしているサービスがあるかどうかを確認する必要があります。
既存の接続を追跡する
Windowsマシンで使用中のポートを確認する最も簡単な方法は、netstat
ツールを使用することです。Netstatはシステム上のすべてのアクティブなポートをチェックし、アクティブな場合は使用されているソースと宛先のIPとポートを返します。
WinRmポートの変更前にリスニングポートを特定するには、netstat -aon
を実行します。 -aon
スイッチ:
- すべてのアクティブな接続を表示する(
a
) - 接続を開いたプロセスのプロセスIDを表示する(
o
) - 宛先IPのDNS名を解決しようとしない(
n
)

たとえば、ポート80でWebサーバーがリッスンしている場合、Local Address
列のローカルアドレスが:80
で終わる行が表示されます。この行には、接続に使用されているPID
またはプロセスIDが表示されます。
PIDを知っていると、Get-Process
のようなPowerShellのコマンドレットを使用して、PIDを参照してプロセス名を見つけることができます。

しかし、この場合は上記でわかるように、プロセス名はSystemとなっています。これは、プロセスがOS内に高度に統合されており、おそらくWindowsに組み込まれていることを意味します。
WinRM互換ポートの設定
WinRMには、互換ポートという機能があります。互換ポートは、ポート80のHTTPとポート443のHTTPSのみで動作する一部の旧バージョンのシステムとの後方互換性を持つために存在します。WinRmをこれらのポートでリッスンするように変更する必要がある場合は、互換性リスナーを有効にします。
ポート80と443で実行中の他のプロセスがないことを確認したら、WSManリスナーを互換性ポート(HTTPの場合は80、HTTPSの場合は443)を使用するように設定します。
WinRMを任意のポートでリッスンするように設定する
何らかの理由でWinRMを標準ではないポートでリッスンする必要がある場合は、それも可能です。次の手順に従って設定します:
- リスナー名を見つけます。これは、
Get-Item
コマンドレットを使用して、すべてのWinRMリスナーを列挙することで行うことができます。以下のコマンドは、現在インストールされているすべてのリスナー(*
)をリスト表示しています。

2. 次に、上記に表示されたリスナー名を使用して、各リスナーをSet-Item
を使用して構成し、リスナーのパスと変更するポート番号を指定します。
3. この時点で、WinRMリスナーは正しいポートでリスニングしていますが、Windowsファイアウォールはおそらくそれらのポートへのリモート接続を拒否しています。これらのポートを開く必要があります。次のコマンドを実行してください。以下のNew-NetFirewallRule
は、カスタムポートへのすべてのインバウンドTCP接続を許可するWindowsファイアウォールルールを作成しています。
関連:Windowsファイアウォールを無効にする:さまざまな方法を発見する
適切なWindowsファイアウォールポートを開かなかった場合、接続しようとすると次のようなメッセージが表示されます:

PSRemotingを使用したカスタムポートへの接続
WinRMサーバーでWinRMを正常に設定および構成したので、WinRMクライアントでの接続をテストする必要があります。それには追加のパラメータであるPort
が必要です。
Invoke-Command
やEnter-PSSession
などのいずれかのPSRemotingコマンドを使用して、Port
パラメータと正常に接続を行うために設定されたポートを指定してください。
