修改远程访问端口的脚本

本脚本功能强大,运行之后既可直接使用新端口进行远程访问。
说明:
1.本脚本能够开启远程桌面功能、设定远程桌面端口、
添加防火墙规则并禁用3389端口等的一系列功能,
并且不需要重新启动系统即可生效。
2.本脚本在 Windows Server 2012 R2 DataCenter 和 Windows Server 2012 DataCenter 简体中文版上测试成功。
理论上也支持 WS2012R2、WS2012、WS2008R2、WS2008、Win8、Win7、Vista 全系列64位、32位版本。
对于 WS2003、WinXP 等不支持高级防火墙的需要修改本脚本中防火墙相关命令。
对于非简体中文版本需要修改本脚本中防火墙相关命令。
3.请右键以管理员身份运行,如果没有请关闭本窗口,重新运行。

@echo off
:: Code by xy 2013-01-10, 11,03-26

title 开启远程桌面 Code by xy 2013-01-10, 11,03-26

echo ------ 开启远程桌面 ------
echo 说明:
echo 1.本脚本能够开启远程桌面功能、设定远程桌面端口、
echo   添加防火墙规则并禁用3389端口等的一系列功能,
echo   并且不需要重新启动系统即可生效。
echo 2.本脚本在 Windows Server 2012 DataCenter 简体中文版上测试成功。
echo   理论上也支持 WS2012、WS2008R2、WS2008、Win8、Win7、Vista 全系列64位、32位版本。
echo   对于 WS2003、WinXP 等不支持高级防火墙的需要修改本脚本中防火墙相关命令。
echo   对于非简体中文版本需要修改本脚本中防火墙相关命令。
echo 3.请右键以管理员身份运行,如果没有请关闭本窗口,重新运行。
echo 4.执行完毕之后会有提示,请耐心等待。
echo.
echo ------ 执行 ------
echo.

echo 备份相关注册表项到 3389.reg.bak :
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" 3389.reg.%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%.bak
echo.

set /p port=请输入端口:
echo.

echo 删除原端口防火墙规则...
rem set /a n=0xff 转换16进制到10进制并赋予变量n
for /f "tokens=3" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber^|find /i "PortNumber"
') do set /a pn=%%a
if not %pn%==3389 (
netsh advfirewall firewall delete rule name=all protocol=tcp localport=%pn%
netsh advfirewall firewall delete rule name=all protocol=udp localport=%pn%
)
for /f "tokens=3" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber^|find /i "PortNumber"
') do set /a pn=%%a
if not %pn%==3389 (
netsh advfirewall firewall delete rule name=all protocol=tcp localport=%pn%
netsh advfirewall firewall delete rule name=all protocol=udp localport=%pn%
)
echo.

echo 添加新端口防火墙规则...
netsh advfirewall firewall add rule name="%port% - rdp (TCP-In)" dir=in action=allow protocol=TCP localport=%port%
netsh advfirewall firewall add rule name="%port% - rdp (UDP-In)" dir=in action=allow protocol=UDP localport=%port%
echo.

echo 禁用3389端口...
netsh advfirewall firewall set rule group="远程桌面" new enable=no
echo.

echo 正在修改端口...
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d %port% /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d %port% /f
echo.

echo 正在启用远程桌面功能,稍后会断开连接...
echo 请稍后使用新端口手动连接...
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
echo.

echo 正在重启远程桌面服务...
net stop "Remote Desktop Services" /y
net start "Remote Desktop Services"
echo.

echo 执行完毕,按任意键关闭本窗口...
pause >nul

对于不支持高级防火墙的早期windows版本,如WS2003、xp等可以使用如下脚本,但需要重新启动才能生效。

@echo off
:: Code by xy 2013-01-10, 11

title 开启远程桌面 Code by xy 2013-01-10, 11

echo ------ 开启远程桌面 ------
echo 注意:
echo 1.请先添加防火墙规则!!!
echo 2.切记第一条!!!
echo 3.仔细看下面的说明!!!
echo 说明:
echo 1.本脚本能够开启远程桌面功能、设定远程桌面端口,但需要重启才能生效。
echo 2.本脚本在 Windows Server 2012 DataCenter 简体中文版上测试成功。
echo   理论上也支持 WS12、WS08、WS03、W8、W7、Vista、XP 全系列64位、32位版本。
echo 3.执行完毕之后会有提示,请耐心等待。
echo.
echo ------ 执行 ------
echo.
set /p port=请输入端口:
echo.
echo 正在修改端口...
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d %port% /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d %port% /f
echo.
echo 正在启用远程桌面功能...
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
echo.
echo 执行完毕,按任意键关闭本窗口...
pause >nul