web-dev-qa-db-ja.com

コマンドラインからWindowsファイアウォールでリモートデスクトップを有効にする

注:#command-lineタグはバッチファイルのみを意味するものではありません。PowerShellスクリプトまたは自由に利用できるユーティリティを受け入れます。これらはコマンドラインから起動でき、無人で作業を完了できます。


tl; dr

windows Vistaで任意のインターフェイス(表示)言語のファイアウォールルールを無人でGUIの状態に正確に変換する方法

精巧な

この質問は #78638 に似ていますが、同じではありません。

基本的に、答えは私にとって良くないので:

  1. set rule group="remote desktop" new enable=Yesは、パブリックネットワーク用にポート3389を開きます。これは避けたいです。また、Windows言語が異なればグループ名も異なりますが、汎用的なソリューションが必要です。
  2. netsh firewall set service type = remotedesktop mode = enableも私にとっては機能しません。win7以降は非推奨であり、現在のネットワークでのみrdpを許可します(パブリックネットワークにいる場合、3389はパブリックネットワーク用に開かれ、その後プライベートネットワークでは機能しません)。

GUI経由でRDPを有効にする前は、RDPのプロトコルごとに1つのルールしかないことに注意してください。ただし、RDPがGUIを介して有効になっている場合、ポートはプライベートネットワークとドメインネットワークに対してのみ開かれ、ルールはこのために分割されます。有効にした後、Windows 8以降では4つのルール、Windows XP、Vistaおよび7では2つのルール(UDPなし)があります。

私が現在使用している回避策は、自分のルールを追加することです:

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

しかし、それは悪いことです。なぜなら、(標準のものとは異なり)ユーザーが変更でき、(他のスクリプトを操作するための)グループがなく、GUIを介してRDPがオフにされたときに自動的に無効にされないためです。

スクリーンショット

初めてGUI経由でRDPを有効にする前のファイアウォールルール ***​​

GUIを介してRDPが有効になっている場合の同じルール(取得したい状態):

そして、GUIでRDPを無効にした後:


私は、誰かが尋ねるまで、Windowsコマンドラインユーティリティを使用したこの戦いの全容を語りません。これが ロシア語の話 です。

12
LogicDaemon
netsh firewall set service type = remotedesktop mode = enable

または

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

私が質問を正しく理解すれば、これはあなたが望むものを手に入れます。これは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

PowerShellソリューションを探している場合は、以下を使用できます。

Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP"
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-UDP"
0
Jaans

次のcmdコマンド。

netsh firewall set service type = remotedesktop mode = enable

そして

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

リモートデスクトップを有効にするのに十分ではありません。

これを機能させるには、これを追加する必要がありました(クライアント:Windows 10)。

netsh advfirewall firewall add rule name="Open Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
0
Andy McRae