Примечание: # тег командной строки не означает только пакетный файл, я принимаю сценарий PowerShell или любую свободно доступную утилиту, которая может быть запущена из командной строки и завершить свою работу без присмотра.
tl; dr
как unattendedly преобразовать правила брандмауэра точно для того чтобы заявить GUI кладет его, на 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 через GUI для каждого протокола существует только одно правило. Но когда RDP включен через GUI, порт только открывается для частных и доменных сетей, и правила разделяются для этого. После включения, есть 4 правила в Windows 8+ и 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 через GUI.
скриншоты
правила брандмауэра перед первым включением RDP через GUI * **
те же правила, когда RDP включен через GUI (состояние, которое я хочу получить):
Я не буду пересказывать всю историю этой борьбы с помощью утилит командной строки windows, пока кто-нибудь не спросит. Вот эта история на русском.