Aktivieren Sie den Remotedesktop in der Windows-Firewall über die Befehlszeile

hinweis: # Kommandozeilen-Tag bedeutet nicht nur Batch-Datei, ich werde ein PowerShell-Skript oder ein frei verfügbares Dienstprogramm akzeptieren, das über die Befehlszeile gestartet werden kann und seine Arbeit unbeaufsichtigt beendet.


Tl;dr

Wie kann man Firewallregeln unbeaufsichtigt genau in den Zustand transformieren, in dem GUI sie unter Windows Vista in Windows 10 einer beliebigen Sprache der Benutzeroberfläche (Anzeige) versetzt?

Ausarbeitung

Diese Frage ist ähnlich wie #786383, aber es ist nicht das gleiche.

Im Grunde, weil die Antwort nicht gut für mich ist:

  1. set rule group="remote desktop" new enable=Yes öffnet Port 3389 für öffentliche Netzwerke, und ich möchte das vermeiden. Außerdem haben verschiedene Windows-Sprachen unterschiedliche Gruppennamen, aber ich brauche eine universelle Lösung.
  2. netsh firewall set service type = remotedesktop mode = enable funktioniert auch bei mir nicht: Es ist seit win7 veraltet und erlaubt rdp nur für das aktuelle Netzwerk (wenn Sie sich in einem öffentlichen Netzwerk befinden, wird 3389 für öffentliche Netzwerke geöffnet und funktioniert nicht in privaten Netzwerken danach).

Beachten Sie, dass es vor der Aktivierung von RDP über die GUI nur eine Regel pro Protokoll für RDP gibt. Wenn RDP jedoch über die GUI aktiviert wird, wird der Port nur für private Netzwerke und Domänennetzwerke geöffnet und die Regeln dafür aufgeteilt. Nach der Aktivierung gibt es 4 Regeln, die in Windows 8+ und 2 Regeln (kein UDP) in Windows XP, Vista und 7.

Workaround, den ich gerade verwende, fügt meine eigenen Regeln hinzu:

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

Aber das ist schlecht, denn (im Gegensatz zu Standard) können sie vom Benutzer geändert werden, haben keine gruppieren Sie (um mit anderen Skripten zu arbeiten) und werden Sie nicht automatisch deaktiviert, wenn RDP über die GUI deaktiviert wird.

, Screenshots

Firewall-Regeln vor dem ersten Aktivieren von RDP über GUI * **

Gleiche Regeln, wenn RDP über GUI aktiviert ist (Zustand, den ich erhalten möchte):

Und nach dem Deaktivieren von RDP in GUI:


Ich werde die ganze Geschichte dieses Kampfes nicht mit Windows-Befehlszeilenprogrammen nacherzählen, bis jemand fragt. Hier ist diese Geschichte auf Russisch.

Author: Community, 2015-04-21

4 answers

netsh firewall set service type = remotedesktop mode = enable

Oder

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
 9
Author: STTR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-04-21 18:58:46

Wenn ich die Frage richtig verstehe, erhalten Sie das, was Sie wollen. Dies ist 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")}

Dadurch werden die Regeln herausgefiltert und die korrekten, sprachunabhängigen Regelnamen abgerufen. Dazu wird auf Port 3389 gefiltert und die Regel gefunden, die "Domäne und private Netzwerke"zugeordnet ist. Profiles -eq 3 ist die Bitmap-Maske für private und Domänennetzwerke, Sie können die Referenz sehen hier:

Https://msdn.microsoft.com/en-us/library/windows/desktop/aa366303(v=vs. 85).aspx -

Wobei 1 (Domänennetzwerke) + 2 (private Netzwerke) = 3

Hier ist der MSDN-Link, über den ich den Rest herausgefunden habe:

Https://msdn.microsoft.com/en-us/library/windows/desktop/aa365309(v=vs. 85).aspx -

Und so habe ich herausgefunden, was die Eigenschaften und Methoden für die anderen Objekte waren:

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}
 5
Author: Nathan Rice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-01-25 17:39:12

Die folgenden cmd-Befehle..

netsh firewall set service type = remotedesktop mode = enable

Und

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /

Reichen nicht aus, um Remote Desktop zu aktivieren.

Ich musste dieses hinzufügen, damit es funktioniert (Client: Windows 10).

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
 1
Author: Andy McRae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-03-04 15:58:20

Wenn Sie nach einer PowerShell-Lösung suchen, kann Folgendes verwendet werden:

Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP"
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-UDP"
 0
Author: Jaans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-10-09 01:43:25