WinRM和PowerShell远程是管理远程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,您将在本地地址以 :80
结尾的行下看到一行。 这一行是您将看到连接正在使用的 PID
或进程 ID。
一旦您知道PID,您就可以使用类似于Get-Process
PowerShell cmdlet引用PID来查找进程名称。

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

接下来,使用上面显示的侦听器名称,使用Set-Item
为每个侦听器配置提供侦听器的路径和要更改的端口号。
3. 此时,WinRM监听器正在正确的端口上监听,Windows防火墙可能会拒绝对这些端口的任何远程连接。您需要打开这些端口。为此,请运行以下命令。下面的New-NetFirewallRule
正在创建一个Windows防火墙规则,以允许所有入站TCP连接到自定义端口。
如果您没有打开适当的Windows防火墙端口,尝试连接时您会收到如下消息:

使用PSRemoting连接到自定义端口
现在,您已成功在WinRM服务器上设置和配置WinRM,需要测试使用WinRM客户端进行连接。为此,只需要一个额外的参数:Port
。
使用任何PSRemoting命令,如Invoke-Command
或Enter-PSSession
,指定Port
参数和成功建立连接的端口。
