通过psexec开启远程桌面,并取消仅允许运行使用网络级别身份验证的远程桌面的计算机连接
在企业域环境中,使用 PsExec 远程修改注册表并配置防火墙,是批量开启远程桌面(RDP)并关闭网络级别身份验证(NLA)的标准做法。
你可以通过以下命令在目标机器上执行:
D:\PSTools\PsExec.exe \F202300823 -u “.\localroot” -p “Cmpw2026#chg$06” -s -h powershell -Command “Write-Host ‘正在开启远程桌面…’; Set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server’ -Name fDenyTSConnections -Value 0; Write-Host ‘正在关闭 NLA 限制…’; Set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’ -Name UserAuthentication -Value 0; Write-Host ‘正在放行防火墙 3389 端口…’; New-NetFirewallRule -DisplayName ‘Allow RDP’ -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow -ErrorAction SilentlyContinue; Write-Host ‘正在重启远程桌面服务…’; Restart-Service -Name TermService -Force; Write-Host ‘配置完成!'”
1、 命令执行逻辑说明:
开启远程桌面:修改注册表 fDenyTSConnections 的值为 0,允许远程连接。
关闭 NLA 限制:修改注册表 UserAuthentication 的值为 0,取消勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”。
放行防火墙:创建入站规则,允许 TCP 3389 端口的通信。
重启服务:强制重启 TermService(远程桌面服务),使注册表和 NLA 的修改立即生效,无需重启电脑。
2、如果上述 PowerShell 命令报错
在某些精简版系统或特殊权限环境下,New-NetFirewallRule 或 Restart-Service 可能会报错。如果遇到这种情况,可以使用以下纯 CMD 命令作为备用方案:
D:\PSTools\PsExec.exe \F202300823 -u “.\localroot” -p “Cmpw2026#chg$06” -s -h cmd /c “reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections /t REG_DWORD /d 0 /f & reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v UserAuthentication /t REG_DWORD /d 0 /f & netsh advfirewall firewall set rule group=远程桌面 new enable=Yes & net stop TermService /y & net start TermService”
执行成功后,你就可以直接使用 mstsc 通过 IP 地址和账号密码连接这台机器了!
三、批量开启远程桌面的两个脚本:
确保你的 D:\PSTools\ 目录下有 PsExec.exe 和 up950.txt(每行一个计算机名或IP)。
为了方便查看结果,建议将以下脚本保存为 .bat 文件(例如 Batch_RDP.bat),然后右键“以管理员身份运行”。
1、版本一:标准 PowerShell 版(推荐)
这个版本使用 PowerShell 原生命令,逻辑清晰,且会自动处理“防火墙规则已存在”的报错。
@echo off
chcp 65001 >nul
echo ==========================================
echo 批量开启远程桌面并关闭NLA限制
echo ==========================================
set PSEXEC=D:\PSTools\PsExec.exe
set LIST=D:\PSTools\up950.txt
set USER=.\localroot
set PASS=Cmpw2026#chg$06
if not exist “%LIST%” (
echo [错误] 找不到列表文件: %LIST%
pause
exit /b
)
for /f “usebackq delims=” %%i in (“%LIST%”) do (
echo.
echo [正在处理] %%i …
%PSEXEC% \%%i -u “%USER%” -p “%PASS%” -s -h powershell -Command “Write-Host ‘正在开启远程桌面…’; Set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server’ -Name fDenyTSConnections -Value 0; Write-Host ‘正在关闭NLA限制…’; Set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’ -Name UserAuthentication -Value 0; Write-Host ‘正在放行防火墙3389端口…’; New-NetFirewallRule -DisplayName ‘Allow RDP’ -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow -ErrorAction SilentlyContinue; Write-Host ‘正在重启远程桌面服务…’; Restart-Service -Name TermService -Force; Write-Host ‘配置完成!'”
)
echo.
echo ==========================================
echo 所有机器处理完毕!
echo ==========================================
pause
2、版本二:纯 CMD 备用版(防报错)
如果某些老旧机器或精简版系统执行 PowerShell 报错,可以使用这个纯 CMD 版本。它使用 netsh 和 reg 命令,兼容性极强。
@echo off
chcp 65001 >nul
echo ==========================================
echo 批量开启远程桌面并关闭NLA限制 (CMD版)
echo ==========================================
set PSEXEC=D:\PSTools\PsExec.exe
set LIST=D:\PSTools\up950.txt
set USER=.\localroot
set PASS=Cmpw2026#chg$06
if not exist “%LIST%” (
echo [错误] 找不到列表文件: %LIST%
pause
exit /b
)
for /f “usebackq delims=” %%i in (“%LIST%”) do (
echo.
echo [正在处理] %%i …
%PSEXEC% \%%i -u “%USER%” -p “%PASS%” -s -h cmd /c “reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections /t REG_DWORD /d 0 /f & reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v UserAuthentication /t REG_DWORD /d 0 /f & netsh advfirewall firewall set rule group=远程桌面 new enable=Yes & net stop TermService /y & net start TermService”
)
echo.
echo ==========================================
echo 所有机器处理完毕!
echo ==========================================
pause
3、脚本核心逻辑说明:
usebackq delims=:防止计算机名中包含空格或特殊字符时被截断。
-s -h:以 SYSTEM 权限运行,并隐藏目标机器的控制台窗口,避免打扰目标机器的当前用户。
Restart-Service -Name TermService -Force:修改注册表后,必须重启该服务才能立即生效,否则可能需要等很久或重启电脑。
你可以先拿 F202300823 测试一下这两个脚本,看看哪个执行更顺畅!















