【入門編】【リモートデスクトップセッション判定】RDP環境とローカルコンソールを識別した挙動切り替え制御 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは。自動化の現場で血の滲むようなデバッグを乗り越えてきた皆さん、ようこそ。

今日は、VBScriptを単なる「古い言語」から「現場を支えるインテリジェントなツール」へと昇華させるための、RDP(リモートデスクトップ)セッション判定という極めて実用的なトピックをお話しします。

マクロの記録から一歩踏み出し、環境に応じた「空気の読めるスクリプト」を書けるようになれば、あなたの自動化ライフは劇的に安定します。さあ、一緒に深掘りしていきましょう。

なぜ「RDP環境」の判定が必要なのか?

皆さんが書いたVBScriptが、突然「GUIダイアログが表示されず、バックグラウンドで処理がスタックしてしまった」という経験はありませんか?

それは、RDPセッションとローカルコンソール(直接操作している画面)の決定的な違いによるものです。

  • ローカル: ユーザーの目視が前提。GUI(`MsgBox`等)が正しく表示される。
  • RDP: セッションが切断されると、GUIを保持するリソースが開放され、`MsgBox`を呼び出すとスクリプトが永久凍結する(ハングアップする)危険がある。

この「環境の境界線」を識別し、「GUIを出すべきか、ログ出力に徹するべきか」を自動で判断させる。これがプロの自動化エンジニアの嗜みです。

判定の極意:WMIという「OSの心臓部」を叩く

VBScriptで環境を識別するには、WMI(Windows Management Instrumentation)を利用します。これはWindowsの管理情報を司る強力なインターフェースです。

今回は、`Win32_ComputerSystem`というクラスから、現在のユーザーの操作状態を覗き見ます。

実践:RDP判定スクリプト

以下のコードは、まさに現場の第一線で使われている「環境切り替え」のテンプレートです。

‘ — RDPセッション判定・自動制御用スクリプト —
Option Explicit

Dim isRDP
isRDP = CheckIfRDP()

If isRDP Then
‘ RDP環境時はGUIを出さず、ログファイルへ書き込む等のサイレント処理へ
WScript.Echo “RDP環境を検知:GUIを抑制し、ログ出力モードに移行します。”
‘ Call LoggingRoutine(“処理開始”)
Else
‘ ローカル環境時はGUIでユーザーに通知
MsgBox “ローカル環境で実行中。GUIの表示が可能です。”, 64, “環境判定システム”
End If

‘ ———————————————————
‘ 判定関数:WMI経由でセッション状態を確認
‘ ———————————————————
Function CheckIfRDP()
Dim objWMIService, colItems, objItem

‘ WMI接続の準備
Set objWMIService = GetObject(“winmgmts:\\.\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select from Win32_ComputerSystem”)

‘ 判定ロジック:NameプロパティやUserNameの特性を確認
‘ 実は、もっとも手軽なのは環境変数を使う方法だが、
‘ WMIはより詳細なハードウェア構成や仮想環境の判定にも応用が効く
For Each objItem in colItems
‘ コンピュータ名やセッション情報を取得
‘ ※ここでは単純化のため、特定の環境変数 “SESSIONNAME” を併用するのが定石
If InStr(UCase(CreateObject(“WScript.Shell”).Environment(“PROCESS”)(“SESSIONNAME”)), “RDP”) > 0 Then
CheckIfRDP = True
Else
CheckIfRDP = False
End If
Next
End Function

陥りやすいエラーと回避の知恵

初心者がこのコードで躓くポイントを、先輩として先回りして伝授します。

1. 「WScript.Shell」の乱用:
`CreateObject(“WScript.Shell”)`は非常に強力ですが、ループの中で何度も呼び出すとメモリリークの原因になります。必ず変数に格納し、使い回してください。
2. `WScript.Echo`の罠:
`WScript.exe`で実行している場合、`Echo`はダイアログボックスになりますが、`Cscript.exe`で実行するとコマンドプロンプトに文字が出ます。自動化の際は`Cscript //nologo`を使って実行環境を統一するのが鉄則です。
3. 権限の問題:
WMIへのアクセスは管理者権限を要求される場合があります。スクリプトが動作しないときは、実行ユーザーの権限を確認しましょう。

ここをクリアすれば、あなたはもう「自動化のプロ」です

いかがでしたか?

単に「動くコード」を書くのではなく、「どこで動いても破綻しないコード」を書く。これこそが、VBScriptを使いこなす醍醐味です。RDP判定を組み込むだけで、あなたのスクリプトの信頼性は格段に向上します。

「自動化しているはずなのに、結局エラーの監視で人間が張り付いている」なんていう本末転倒な状況から、これで卒業です。

もし分からないことがあれば、いつでもまた聞きに来てください。あなたのコードが、現場の過酷な環境でもスマートに生き抜けることを願っています。頑張ってくださいね!

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