しかし、Windows Serverは、Windows Server 2019となってもデフォルトではリモートデスクトップ接続は有効になっておらず、手動で設定を変更する必要があり、非常にめんどくさい・・・。というわけで、PowerShellで実行する方法を確認してみた。
確認した結果、コマンドとしてはわずか3行となることがわかったが、長いコマンドとなるため手打ちは現実的ではない。リモートデスクトップ設定する前に実行する場合は、スクリプト化などしてファイルサーバ等に配置し、端末やサーバにスクリプトをコピー実行するという使い方が現実的だろう。
リモートデスクトップ接続を有効にする
結論から言うと、リモートデスクトップはレジストリを書き換えることで対処する。HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server
に保存されている以下2つのキーを設定する。キー | デフォルト値 | 説明 |
---|---|---|
fDenyTSConnections | 1 | 「このコンピュータへのリモート接続を許可しない/許可しない」の設定。0で「許可する」、1で「許可しない」。 |
UserAuthentication | 0 | 「ネットワークレベル認証でリモートデスクトップを実行しているコンピューターからのみ接続を許可する (推奨)」の設定。0で無効、1で有効。 |
Get-ItemProperty
コマンドレットで現在の設定値を確認することができる。PS C:\> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections"
fDenyTSConnections : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
erver
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
PSChildName : Terminal Server
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
PS C:\> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication"
UserAuthentication : 0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
erver\WinStations\RDP-Tcp
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
erver\WinStations
PSChildName : RDP-Tcp
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Set-ItemProperty
コマンドレットで設定を変更する。PS C:\> Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value "0"
PS C:\> Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1
上記コマンドを実行すると以下の通りリモートデスクトップの設定が変更される。
【変更前】
【変更後】
Windowsファイアウォールでリモートデスクトップの通信を許可する
GUIでリモートデスクトップ接続を許可する設定を実施した場合は、同時にWindowsファイアウォールの必要な通信規則を有効にしてくれるが、レジストリを直接書き換えた場合は設定されないため、手動でWindowsファイアウォールの通信規則の有効化が必要となる。通信の規則自体はOSデフォルトで作成がされており、「RemoteDesktop~」から始まる以下3つの規則を有効化すればよい。
- RemoteDesktop-UserMode-In-TCP
- RemoteDesktop-UserMode-In-UDP
- RemoteDesktop-Shadow-In-TCP
PS C:\> Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | ft Name,DisplayName,Enabled -AutoSize
Name DisplayName Enabled
---- ----------- -------
RemoteDesktop-UserMode-In-TCP リモート デスクトップ - ユーザー モード (TCP 受信) False
RemoteDesktop-UserMode-In-UDP リモート デスクトップ - ユーザー モード (UDP 受信) False
RemoteDesktop-Shadow-In-TCP リモート デスクトップ - シャドウ (TCP 受信) False
上記規則をSet-NetFirewallRule
コマンドレットを使って有効化する。PS C:\> Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | Set-NetFirewallRule -Enabled true
上記コマンドを実行後にGUIのファイアウォールの状態を確認すると、問題なくリモートデスクトップの受信の規則が有効化されていることが確認できる。まとめ
まとめると、以下3つのコマンドをメモ帳に書いておいて、「Enable-RDP.ps1」などの名前でスクリプトとして保存し、ファイルを右クリック→「PowerShellで実行」を実施すれば、最速でリモートデスクトップの有効化が実施できる。Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value "0"
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1
Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | Set-NetFirewallRule -Enabled true
0 件のコメント:
コメントを投稿