WinRM和PowerShell Remoting是管理遠程Windows計算機時必不可少的功能。就像其他服務一樣,WinRM在特定情況下監聽特定端口。在本教程中,您將了解這些WinRM端口,甚至可以在需要時如何更改它們。
WinRM監聽器
WinRM(以及它運行的端口)中最重要的部分之一是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
)

例如,如果一个Web服务器正在侦听端口80,您将在Local Address
列下看到本地地址以:80
结尾的行。该行是您将看到连接正在使用的PID
或进程ID的位置。
一旦您知道PID,您可以使用类似Get-Process
PowerShell cmdlet的命令引用PID来查找进程名称。

虽然在这种情况下,您可以在上面看到进程名称只是System。这意味着该进程高度集成在操作系统中,可能是内建于Windows中的。
设置WinRM兼容端口
WinRM具有名为兼容端口的功能。兼容端口是为了向某些仅在HTTP端口80和HTTPS端口443上工作的遗留系统提供向后兼容性。如果您需要更改WinRm以侦听这些端口,请启用兼容性侦听器。
一旦您知道您没有任何其他东西在端口80和443上运行,请将WSMan侦听器设置为使用兼容性端口(HTTP使用80端口,HTTPS使用443端口)。
设置WinRM以侦听任何端口
如果出于某种原因,您需要配置WinRM以侦听非标准端口,您也可以这样做。操作如下:
- 查找侦听器名称。您可以使用
Get-Item
命令枚举所有WinRM侦听器来完成此操作。下面的命令列出了当前安装的所有侦听器(*
)。

2. 接下来,使用上述显示的侦听器名称,使用Set-Item
来配置每个侦听器,提供侦听器的路径和要更改的端口号。
此時,WinRM 監聽器正在監聽正確的端口,但 Windows 防火牆可能會拒絕對這些端口的遠程連接。您需要打開這些端口。要這樣做,請運行以下命令。下面的 New-NetFirewallRule
創建一個 Windows 防火牆規則,以允許對自定義端口的所有入站 TCP 連接。
如果您沒有打開相應的 Windows 防火牆端口,當嘗試連接時,您會收到以下消息:

使用 PSRemoting 連接到自定義端口
現在,您已在 WinRM 服務器上成功設置和配置 WinRM,您需要使用 WinRM 客戶端進行連接測試。要這樣做,只需要一個額外的參數; Port
。
在使用任何 PSRemoting 命令(如 Invoke-Command
或 Enter-PSSession
)時,請指定 Port
參數和成功建立連接的端口。
