Изменение порта RDP

Изменение порта RDP

По умолчанию, #RDP использует порт TCP 3389, но по каким-либо обстоятельствам приходится его менять. Рассмотрим два способа изменения порта RDP.

Ручное изменение порта

Для изменения порта #RDP, нужно отредактировать реестр:

  1. Открыть редактор реестра regedit.exe.
  2. Пройти по пути HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp.
  3. Найти параметр PortNumber.
  4. Ввести новый номер порта (decimal).
  5. Перезагрузить компьютер.

Автоматизация

Весь процесс можно автоматизировать при помощи скрипта.

Параметры

Скрипт имеет один единственный параметр, это номер порта.

  • -P -P_Port - номер порта #RDP.

Примеры

Запускается скрипт обычным способом. В параметре -P указывается новый номер порта #RDP.

Терминал
1
.\pwsh.rdp.port.ps1 -P 50102

Алгоритм работы

  • Проверяется в реестре корректность пути и изменяется номер порта #RDP. Если путь не найден, то скрипт аварийно завершает работу без дальнейших изменений.
  • В брандмауэр вносится два правила, которые разрешают подключение к новому порту #RDP.
  • Если служба TermService (служба удаленных рабочих столов) запущена, она перезапускается, применяя новые параметры порта #RDP.

Скрипт

pwsh.rdp.port.ps1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<#PSScriptInfo
  .VERSION      0.1.0
  .GUID         5d2bddd9-4eed-42f0-a0ba-7d30efcb81e2
  .AUTHOR       Kai Kimera
  .AUTHOREMAIL  mail@kai.kim
  .COMPANYNAME  Library Online
  .COPYRIGHT    2023 Library Online. All rights reserved.
  .LICENSEURI   https://choosealicense.com/licenses/mit/
  .PROJECTURI   https://lib.onl/ru/articles/2023/10/616da78a-eb16-575a-9119-65f0c0c7baee/
#>

#Requires -Version 7.2
#Requires -RunAsAdministrator

<#
  .SYNOPSIS
  Changing the RDP port number.

  .DESCRIPTION
  Changing the listening port for Remote Desktop on your computer.

  .PARAMETER P_Port
  RDP port number.
  Default: 3389.

  .EXAMPLE
  .\pwsh.rdp.port.ps1 -P 50102

  .LINK
  https://lib.onl/ru/articles/2023/10/616da78a-eb16-575a-9119-65f0c0c7baee/
#>

# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURATION.
# -------------------------------------------------------------------------------------------------------------------- #

Param(
  [Parameter(HelpMessage="RDP port number.")]
  [ValidatePattern('^[0-9]+$')]
  [Alias('P')][int]$P_Port = 3389
)

# -------------------------------------------------------------------------------------------------------------------- #
# INITIALIZATION.
# -------------------------------------------------------------------------------------------------------------------- #

function Start-Script() {
  Start-RdpRegistry
  Start-RdpFirewall
  Start-RdpService
}

# -------------------------------------------------------------------------------------------------------------------- #
# EDITING THE REGISTRY.
# -------------------------------------------------------------------------------------------------------------------- #

function Start-RdpRegistry() {
  $Path = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp'

  $Param = @{
    LiteralPath = "${Path}"
    Name = 'PortNumber'
    Value = $P_Port
  }

  if (Test-Path -LiteralPath "${Path}") {
    Set-ItemProperty @Param
  } else {
    Write-Error -Message "'${Path}' not found!" -ErrorAction 'Stop'
  }
}

# -------------------------------------------------------------------------------------------------------------------- #
# EDITING THE FIREWALL.
# -------------------------------------------------------------------------------------------------------------------- #

function Start-RdpFirewall() {
  $TCP = @{
    DisplayName = 'Custom RDP Port (TCP-In)'
    Profile = 'Public'
    Direction = Inbound
    Action = Allow
    Protocol = TCP
    LocalPort = $P_Port
  }

  $UDP = @{
    DisplayName = 'Custom RDP Port (UDP-In)'
    Profile = 'Public'
    Direction = Inbound
    Action = Allow
    Protocol = UDP
    LocalPort = $P_Port
  }

  New-NetFirewallRule @TCP
  New-NetFirewallRule @UDP
}

# -------------------------------------------------------------------------------------------------------------------- #
# RESTARTING THE REMOTE DESKTOP SERVICES.
# -------------------------------------------------------------------------------------------------------------------- #

function Start-RdpService() {
  $Name = 'TermService'

  $Param = @{
    Name = "${Name}"
    Force = $true
  }

  if ((Get-Service -Name "${Name}").Status -eq 'Running') {
    Restart-Service @Param
  } else {
    Write-Host "Service '${Name}' not running!"
  }
}

# -------------------------------------------------------------------------------------------------------------------- #
# -------------------------------------------------< RUNNING SCRIPT >------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #

Start-Script