Включить удаленный рабочий стол в брандмауэре Windows из командной строки
примечание: #тег командной строки не подразумевает только пакетный файл, я приму сценарий PowerShell или любую свободно доступную утилиту, которую можно запустить из командной строки и завершить ее работу без присмотра.
Tl;др
Как без привязки преобразовать правила брандмауэра точно в соответствии с графическим интерфейсом пользователя в Windows Vista в Windows 10 на любом языке интерфейса (отображения)?
Разработка
Этот вопрос похож на #786383, но это не то же самое.
В основном, потому что ответ мне не подходит:
-
set rule group="remote desktop" new enable=Yes
открывает порт 3389 для общедоступных сетей, и я хочу этого избежать. Кроме того, разные языки Windows имеют разные названия групп, но мне нужно универсальное решение. -
netsh firewall set service type = remotedesktop mode = enable
тоже не работает для меня: он устарел с win7 и разрешает rdp только для текущей сети (если вы находитесь в общедоступной сети, 3389 будет открыт для общедоступных сетей и не будет работать в частных сетях впоследствии).
Обратите внимание, что до включения RDP с помощью графического интерфейса пользователя для RDP существует только одно правило для каждого протокола. Но когда RDP включен через графический интерфейс, порт открывается только для частных и доменных сетей, и для этого правила разделяются. После включения в Windows 8+ есть 4 правила и 2 правила (без UDP) в Windows XP, Vista и 7.
Обходной путь, который я сейчас использую, заключается в добавлении моих собственных правил:
netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (TCP-In)" dir=in action=allow program="%%SystemRoot%%system32svchost.exe" service="TermService" description="Inbound rule for the Remote Desktop service to allow RDP traffic. [TCP 3389] added by LogicDaemon's script" enable=yes profile=private,domain localport=3389 protocol=tcp
netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (UDP-In)" dir=in action=allow program="%%SystemRoot%%system32svchost.exe" service="TermService" description="Inbound rule for the Remote Desktop service to allow RDP traffic. [UDP 3389] added by LogicDaemon's script" enable=yes profile=private,domain localport=3389 protocol=udp
Но это плохо, потому что (в отличие от стандартных) они могут быть изменены пользователем, не имеют группироваться (для работы с другими сценариями) и не отключаться автоматически при отключении RDP через графический интерфейс.
Скриншоты
Правила брандмауэра перед первым включением RDP через графический интерфейс пользователя * **
Те же правила, когда RDP включен через графический интерфейс (состояние, которое я хочу получить):
И после отключения RDP в графическом интерфейсе:
Я не буду пересказывать всю историю этой борьбы с утилитами командной строки Windows, пока кто-нибудь не спросит. Вот эта история на русском языке.