リモートデスクトップ接続がアクティブにならない
職場でWindows Server 2019を利用しています。
メインとなるサーバAからサーバB、C、D…と複数台のサーバにリモートデスクトップする操作があり、バッチファイルで各サーバに接続させるような形で操作しています。
普通にアプリ一覧からリモートデスクトップ接続をするときはもちろん普通に接続できますが、バッチによる接続だとリモートデスクトップがアクティブとならずタスクバーのアイコンが点滅している状態となってしまい、手動でアクティブ表示にする必要がありました。
面倒だったのでスクリプトを作成してリモートデスクトップ接続を最小化→最大化→アクティブ化の順に操作することでアクティブになって表示されるようになりました。
ところが画面上にはアクティブとなったサーバBが表示されているのですが、サーバBでなにも操作しない状態でWindows+Eキーでエクスプローラを表示させると接続元のサーバAの内容が表示されてしまいます。
明確に接続先を操作してからでないと接続元の制御が残ってしまっているような状態です。
もちろんなにか操作をしてからにすればいいのでしょうが、気持ち悪い状態なので解決方法があればと思い、質問しました。
以下スクリプト部分です。バッチファイルはスクリプトファイルを呼び出すだけなので割愛します。なおActiveDirectoryは構成されておらずWorkgroup環境になります。
よろしくお願いします。
set ws = createobject("wscript.shell")
set cs = createobject("wbemscripting.swbemlocator").connectserver
'実行前MSTSCプロセスの取得(差分でpidを特定するため)
set proclist = cs.execquery("select * from win32_process where caption = 'mstsc.exe'")
old_cnt = proclist.count
redim procid(old_cnt)
i = 0
for each proc in proclist
procid(i) = proc.processid
next
sv = "サーバA"
ws.run "cmd /c start mstsc /v:" & sv, 1, false
wscript.sleep 2000
'実行後MSTSCプロセスの取得
set proclist = cs.execquery("select * from win32_process where caption = 'mstsc.exe'")
i = 0
for each proc in proclist
old_id = 0
for i = 0 to old_cnt
if proc.processid = procid(i) then
old_id = 1
end if
next
if old_id = 0 then
new_id = proc.processid
end if
next
'最終的に確定したpidを操作
ws.appactivate new_id
ws.sendkeys "%n"
ws.sendkeys "%x"
ws.appactivate new_id
お礼
アドバイスありがとうございます。 mstsc.exeのバージョンを調べたところ、当方も全く同じでした。 XPSP3を入れたことが原因で、mstsc.exeとmstscax.dllをSP2バージョンに戻したところ、接続できるようになりました。 ありがとうございました。