Включить удаленный рабочий стол в брандмауэре Windows из командной строки

примечание: #тег командной строки не подразумевает только пакетный файл, я приму сценарий PowerShell или любую свободно доступную утилиту, которую можно запустить из командной строки и завершить ее работу без присмотра.


Tl;др

Как без привязки преобразовать правила брандмауэра точно в соответствии с графическим интерфейсом пользователя в Windows Vista в Windows 10 на любом языке интерфейса (отображения)?

Разработка

Этот вопрос похож на #786383, но это не то же самое.

В основном, потому что ответ мне не подходит:

  1. set rule group="remote desktop" new enable=Yes открывает порт 3389 для общедоступных сетей, и я хочу этого избежать. Кроме того, разные языки Windows имеют разные названия групп, но мне нужно универсальное решение.
  2. 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, пока кто-нибудь не спросит. Вот эта история на русском языке.