примечание: тег командной строки # не подразумевает только пакетный файл, я приму скрипт PowerShell или любую свободно доступную утилиту, которую можно запустить из командной строки и завершить свою работу без присмотра.
ТЛ; др
Как автоматически преобразовать правила брандмауэра в состояние, в котором он находится, в 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 существует только одно правило. Но когда 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%%\system32\svchost.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%%\system32\svchost.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, пока кто-нибудь не спросит. Вот эта история на русском языке .
источник
Ответы:
или же
источник
netsh firewall
устарела (начиная с win7), не работает в Win10 и разрешает rdp только для текущей сети (если вы общедоступны, rdp будет разрешен для публичных сетей и впоследствии не будет работать в частных сетях). Это отмечено в оригинальной истории, я просто подумал, что не стоит упоминать в вопросе. Я исправлю эту ошибку.netsh firewall
все еще работает в Windows 10 (проверено на Pro).Если я правильно понимаю вопрос, это даст вам то, что вы хотите. Это PowerShell:
Это отфильтрует правила и захватит правильные имена правил, не зависящие от языка. Это делается путем фильтрации на порте 3389 и нахождения правила, связанного с «Домен и частные сети».
Profiles -eq 3
это битовая маска для частных и доменных сетей, вы можете увидеть ссылку здесь:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366303(v=vs.85).aspx
Где 1 (Доменные сети) + 2 (Частные сети) = 3
Вот ссылка MSDN, где я выяснил остальное:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365309(v=vs.85).aspx
И вот как я выяснил, какие свойства и методы были для других объектов:
источник
)}
Если вы ищете решение PowerShell, можно использовать следующее:
источник
Следующие команды cmd ..
и
недостаточно для включения удаленного рабочего стола.
Мне пришлось добавить это, чтобы заставить его работать (Клиент: Windows 10).
источник