【VBScript】リモートデスクトップ接続を許可する


この記事はプロモーションを含みます。

VBScript

ホーム > VBScript 逆引きリファレンス

VBScriptで、リモートデスクトップ接続を許可する、許可しない設定を行う方法を解説します。

はじめに

本記事では、VBScriptを使用して、リモートデスクトップ接続を有効化(許可する)、無効化(許可しない)する設定を行う方法を説明します。

ここで紹介するスクリプトはレジストリ操作を含みます。
レジストリは操作を誤ると、Windowsが起動しなくなる可能性があるので注意して下さい。

リモートデスクトップ接続の設定を変更する方法ですが、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を実行する方法を詳しく知りたい方は以下を参考にして下さい。

記事は以上となります。リモートデスクトップ接続の設定は簡単なものですが、スクリプト化しておくことで、複数端末に設定する場合などに効率化出来るかと思いますので、使ってみて下さい。

コメント

タイトルとURLをコピーしました