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

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


tl; dr

как unattendedly преобразовать правила брандмауэра точно для того чтобы заявить GUI кладет его, на 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 через 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 (состояние, которое я хочу получить):

и после отключение RDP в GUI:


Я не буду пересказывать всю историю этой борьбы с помощью утилит командной строки windows, пока кто-нибудь не спросит. Вот эта история на русском.

23
задан Community
12.12.2022 3:01 Количество просмотров материала 2770
Распечатать страницу

2 ответа

netsh firewall set service type = remotedesktop mode = enable

или

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
7
отвечен STTR 2022-12-13 10:49

Если я правильно понимаю вопрос, это даст вам то, что вы хотите. Это PowerShell:

$FireWall = New-Object -comObject HNetCfg.FwPolicy2
$EnableRules = $FireWall.rules | Where-Object {$_.LocalPorts -like "*3389*" -and $_.Profiles -eq "3"}
ForEach ($Rule In $EnableRules){($Rule.Enabled = "True")}

Это будет отфильтровать правила и захватить правильные имена правил агностик языка. Это делается путем фильтрации по порту 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

и вот как я понял, что свойства и методы были для других объектов:

PS C:\> $FireWall | Get-Member


   TypeName: System.__ComObject#{98325047-c671-4174-8d81-defcd3f03186}

Name                                         MemberType            Definition
----                                         ----------            ----------
EnableRuleGroup                              Method                void EnableRuleGroup (int, string, bool)
IsRuleGroupEnabled                           Method                bool IsRuleGroupEnabled (int, string)
RestoreLocalFirewallDefaults                 Method                void RestoreLocalFirewallDefaults ()
BlockAllInboundTraffic                       ParameterizedProperty bool BlockAllInboundTraffic (NET_FW_PROFILE_TYPE2...
DefaultInboundAction                         ParameterizedProperty NET_FW_ACTION_ DefaultInboundAction (NET_FW_PROFI...
DefaultOutboundAction                        ParameterizedProperty NET_FW_ACTION_ DefaultOutboundAction (NET_FW_PROF...
ExcludedInterfaces                           ParameterizedProperty Variant ExcludedInterfaces (NET_FW_PROFILE_TYPE2_...
FirewallEnabled                              ParameterizedProperty bool FirewallEnabled (NET_FW_PROFILE_TYPE2_) {get...
IsRuleGroupCurrentlyEnabled                  ParameterizedProperty bool IsRuleGroupCurrentlyEnabled (string) {get}
NotificationsDisabled                        ParameterizedProperty bool NotificationsDisabled (NET_FW_PROFILE_TYPE2_...
UnicastResponsesToMulticastBroadcastDisabled ParameterizedProperty bool UnicastResponsesToMulticastBroadcastDisabled...
CurrentProfileTypes                          Property              int CurrentProfileTypes () {get}
LocalPolicyModifyState                       Property              NET_FW_MODIFY_STATE_ LocalPolicyModifyState () {g...
Rules                                        Property              INetFwRules Rules () {get}
ServiceRestriction                           Property              INetFwServiceRestriction ServiceRestriction () {g...



PS C:\> $Rules | Get-Member


   TypeName: System.__ComObject#{9c27c8da-189b-4dde-89f7-8b39a316782c}

Name                 MemberType Definition
----                 ---------- ----------
Action               Property   NET_FW_ACTION_ Action () {get} {set}
ApplicationName      Property   string ApplicationName () {get} {set}
Description          Property   string Description () {get} {set}
Direction            Property   NET_FW_RULE_DIRECTION_ Direction () {get} {set}
EdgeTraversal        Property   bool EdgeTraversal () {get} {set}
EdgeTraversalOptions Property   int EdgeTraversalOptions () {get} {set}
Enabled              Property   bool Enabled () {get} {set}
Grouping             Property   string Grouping () {get} {set}
IcmpTypesAndCodes    Property   string IcmpTypesAndCodes () {get} {set}
Interfaces           Property   Variant Interfaces () {get} {set}
InterfaceTypes       Property   string InterfaceTypes () {get} {set}
LocalAddresses       Property   string LocalAddresses () {get} {set}
LocalPorts           Property   string LocalPorts () {get} {set}
Name                 Property   string Name () {get} {set}
Profiles             Property   int Profiles () {get} {set}
Protocol             Property   int Protocol () {get} {set}
RemoteAddresses      Property   string RemoteAddresses () {get} {set}
RemotePorts          Property   string RemotePorts () {get} {set}
serviceName          Property   string serviceName () {get} {set}
3
отвечен Nathan Rice 2022-12-13 13:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

command-line
remote-desktop
unattended
windows
windows-firewall
Вверх