WinRM端口:默认设置和定制指南

WinRM和PowerShell远程是管理远程Windows计算机时至关重要的功能。就像其他服务一样,WinRM在特定情况下监听特定端口。在本教程中,您可以了解这些WinRM端口,甚至可以学习如何在需要时更改它们。

相关: PowerShell远程:终极指南

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

相关: PowerShell远程:终极指南

连接到错误端口时的错误

如果更改端口时没有添加防火墙规则,即使像这样提供端口,您也将收到相同的消息。

更改WinRM端口

虽然Microsoft建议保持默认的监听端口以确保兼容性和易用性,但您可以更改它们。在默认端口存在冲突或防火墙限制阻止使用这些端口的情况下,这可能会有所帮助。

也许您已经设置了一个系统,配置为通过自定义端口连接到 WinRM。当您尝试像平常一样连接时,您会收到以下错误消息:

Failed WinRM connection due to wrong port

如果是这样,那么是时候在服务器端更改 WinRM 端口了!

要更改 WinRM 端口,首先需要弄清楚是否已经有一个服务在这些端口上监听。

追踪现有连接

在 Windows 机器上发现哪些端口正在使用的最简单方法是使用 netstat 工具 Netstat 检查系统上所有活动端口,如果活动,则返回使用的源和目标 IP 和端口。

在更改 WinRM 端口之前追踪侦听端口,运行 netstat -aon-aon 开关:

  • 显示所有活动连接(a
  • 显示打开连接的进程的进程 ID(o
  • 不尝试解析目标 IP 的任何 DNS 名称(n
Running netstat to find listening connections

例如,如果一个 web 服务器正在侦听端口 80,您将在本地地址以 :80 结尾的行下看到一行。 这一行是您将看到连接正在使用的 PID 或进程 ID。

一旦您知道PID,您就可以使用类似于Get-Process PowerShell cmdlet引用PID来查找进程名称。

Running Get-Process to find process name

尽管在这种情况下,您可以在上面看到进程名称只是System。这意味着该进程在操作系统中高度集成,可能是内建在Windows中的。

设置WinRM兼容端口

WinRM具有一个称为兼容端口的功能。兼容端口存在是为了与一些仅在端口80用于HTTP和端口443用于HTTPS的传统系统向后兼容。如果您需要更改WinRm以侦听这些端口,请启用兼容侦听器。

一旦您知道在端口80和443上没有其他运行的内容,请将WSMan侦听器设置为使用兼容端口(HTTP使用80,HTTPS使用443)。

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value $true
 Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value $true

设置WinRM以侦听任何端口

如果出于某种原因,您需要配置WinRM以侦听非标准端口,您也可以这样做。为此,请执行以下操作:

  1. 找到侦听器名称。您可以使用Get-Item cmdlet列举所有当前安装的WinRM侦听器来完成此操作。下面的命令正在列出所有(*)当前安装的侦听器。
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

接下来,使用上面显示的侦听器名称,使用Set-Item为每个侦听器配置提供侦听器的路径和要更改的端口号。

Set-Item WSMan:\localhost\Listener\\Port -Value 

3. 此时,WinRM监听器正在正确的端口上监听,Windows防火墙可能会拒绝对这些端口的任何远程连接。您需要打开这些端口。为此,请运行以下命令。下面的New-NetFirewallRule正在创建一个Windows防火墙规则,以允许所有入站TCP连接到自定义端口。

$FirewallParam = @{
     DisplayName = 'Custom WinRM Port Rule'
     Direction = 'Inbound'
     LocalPort = 
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

相关:禁用Windows防火墙:发现多种方法

如果您没有打开适当的Windows防火墙端口,尝试连接时您会收到如下消息:

Failed WinRM connection due to Windows firewall

使用PSRemoting连接到自定义端口

现在,您已成功在WinRM服务器上设置和配置WinRM,需要测试使用WinRM客户端进行连接。为此,只需要一个额外的参数:Port

使用任何PSRemoting命令,如Invoke-CommandEnter-PSSession,指定Port参数和成功建立连接的端口。

Enter-PSSession -ComputerName <hostname> -Port 1111
Successful WinRm connection

相关:Invoke-Command:运行远程代码的最佳方法

Source:
https://adamtheautomator.com/winrm-port/