VBScriptで、リモートデスクトップ接続を許可する、許可しない設定を行う方法を解説します。
はじめに
本記事では、VBScriptを使用して、リモートデスクトップ接続を有効化(許可する)、無効化(許可しない)する設定を行う方法を説明します。
リモートデスクトップ接続の設定を変更する方法ですが、Windows10のバージョンによって、設定方法が異なるようです。
Windows7や初期の頃の10であれば、レジストリの設定のみでリモートデスクトップ接続を有効化・無効化できましたが、現行の22H2では出来ませんでした。
色々試したところ、新しめのWindows10では、レジストリの設定に加え、ローカルグループポリシーの設定も必要になっているようです。
本記事では、Windows7と初期の頃のWindows10と新しめのWindows10の2パターンの方法を記載しておきます。
ソースコード:Windows7、10(初期のバージョン)
サンプルのソースコードです。
こちらの場合は、レジストリの設定のみを行っています。
Option Explicit
' リモートデスクトップ接続設定
' True:許可する/False:許可しない
Const CONFIG = False
' キー名
Const KEY_A = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\fDenyTSConnections"
Const KEY_B = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\updateRDStatus"
' 宣言
Dim objShell, msg
' WSHオブジェクトの作成
Set objShell = CreateObject("WScript.Shell")
' リモートデスクトップ接続の設定
If(CONFIG)Then
' 有効化
objShell.RegWrite KEY_A, 0, "REG_DWORD"
objShell.RegWrite KEY_B, 0, "REG_DWORD"
msg = "有効"
Else
' 無効化
objShell.RegWrite KEY_A, 1, "REG_DWORD"
objShell.RegWrite KEY_B, 1, "REG_DWORD"
msg = "無効"
End If
' 設定内容の確認
WScript.Echo("キー:" & KEY_A & vbCrLf & "0:有効/1:無効 → 現在の設定:" & objShell.RegRead(KEY_A) & "[" & msg & "]")
WScript.Echo("キー:" & KEY_B & vbCrLf & "0:有効/1:無効 → 現在の設定:" & objShell.RegRead(KEY_B) & "[" & msg & "]")
' WSHオブジェクトの破棄
Set objShell = Nothing
ソースコード:Windows10(バージョン22H2以降~)
サンプルのソースコードです。
こちらの場合は、レジストリの設定に加え、ローカルグループポリシーの変更も行っています。
ローカルグループポリシーについては、VBScriptからPowerShellのコマンドを実行することで、設定を変更しています。
Option Explicit
' リモートデスクトップ接続設定
' True:許可する/False:許可しない
Const CONFIG = False
' キー名
Const KEY_A = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\fDenyTSConnections"
Const KEY_B = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\updateRDStatus"
' 宣言
Dim objShell, msg
' WSHオブジェクトの作成
Set objShell = CreateObject("WScript.Shell")
' リモートデスクトップ接続の設定
If(CONFIG)Then
' 有効化
objShell.RegWrite KEY_A, 0, "REG_DWORD"
objShell.RegWrite KEY_B, 0, "REG_DWORD"
msg = "有効"
Else
' 無効化
objShell.RegWrite KEY_A, 1, "REG_DWORD"
objShell.RegWrite KEY_B, 1, "REG_DWORD"
msg = "無効"
End If
' 設定内容の確認
WScript.Echo("キー:" & KEY_A & vbCrLf & "0:有効/1:無効 → 現在の設定:" & objShell.RegRead(KEY_A) & "[" & msg & "]")
WScript.Echo("キー:" & KEY_B & vbCrLf & "0:有効/1:無効 → 現在の設定:" & objShell.RegRead(KEY_B) & "[" & msg & "]")
' PowerShellのコマンド
Const PS_CMD_1 = "Set-NetFirewallRule -DisplayName 'リモート デスクトップ - シャドウ (TCP 受信)' -Enabled "
Const PS_CMD_2 = "Set-NetFirewallRule -DisplayName 'リモート デスクトップ - ユーザー モード (TCP 受信)' -Enabled "
Const PS_CMD_3 = "Set-NetFirewallRule -DisplayName 'リモート デスクトップ - ユーザー モード (UDP 受信)' -Enabled "
' PowerShellコマンドの実行
objShell.Run "powershell -ExecutionPolicy RemoteSigned -Command " & PS_CMD_1 & CONFIG, 0
objShell.Run "powershell -ExecutionPolicy RemoteSigned -Command " & PS_CMD_2 & CONFIG, 0
objShell.Run "powershell -ExecutionPolicy RemoteSigned -Command " & PS_CMD_3 & CONFIG, 0
' WSHオブジェクトの破棄
Set objShell = Nothing
実行方法
スクリプトの実行方法です。
コマンドプロンプトを起動し、以下のように「cscript スクリプトファイル名.vbs」を実行して下さい。
*コマンドプロンプトは管理者で起動して下さい。
cscript sample.vbs
コマンドプロンプトで、VBScriptを実行する方法を詳しく知りたい方は以下を参考にして下さい。
記事は以上となります。リモートデスクトップ接続の設定は簡単なものですが、スクリプト化しておくことで、複数端末に設定する場合などに効率化出来るかと思いますので、使ってみて下さい。
コメント