【入門編】【リモート端末一括展開タスク】ネットワーク共有とWMI Win32_Process を連携させた自己複製・遠隔スクリプト実行 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを掌握せよ:リモート端末を自在に操る「自己複製・遠隔実行」の極意

こんにちは。システム自動化の深淵へようこそ。
「マクロの記録」で生成されたコードの迷宮から抜け出し、OSそのものを手足のように動かしたいと願うあなたへ。今日は、VBScript(以下VBS)の真骨頂である「WMI(Windows Management Instrumentation)」と「ネットワーク共有」を組み合わせた、インフラ管理の極意を伝授します。

多くの初心者が「VBSは古い」と口にしますが、それは誤りです。VBSは、あらゆるWindows環境に標準搭載された「最強の軽量ポータブルエンジン」なのです。

—

1. なぜ「自己複製・遠隔実行」なのか?

企業内の全PCに対して一斉に設定変更やログ回収を行う際、専用の管理ツールを導入するコストは馬鹿になりません。VBSであれば、「共有フォルダに置いたスクリプトを、WMI経由でリモート実行させる」だけで、エージェントレスな管理網が完成します。

この手法を理解すれば、あなたは数千台の端末を1秒で指揮する「インフラの指揮官」になれるのです。

—

2. 核心技術:Win32_Process.Create の正体

リモート実行の要は、WMIの`Win32_Process`クラスにあります。これはWindowsのプロセス管理を司るインターフェースで、ここを叩くことで、離れた場所にあるPCの背後でコマンドを走らせることができます。

実装コード:リモート実行のテンプレート

まずは、指定したPCで任意のコマンドを叩く基本スクリプトを見てみましょう。

‘ リモート実行用関数
Function ExecuteRemoteCommand(strComputer, strCommand)
Dim objWMIService, objProcess, intProcessID, errReturn

‘ WMIサービスへ接続(権限に注意!)
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)

‘ プロセス作成クラスの取得
Set objProcess = objWMIService.Get(“Win32_Process”)

‘ コマンドを実行(戻り値 0 は成功)
errReturn = objProcess.Create(strCommand, Null, Null, intProcessID)

If errReturn = 0 Then
WScript.Echo “成功: ” & strComputer & ” でプロセスID ” & intProcessID & ” を起動しました。”
Else
WScript.Echo “失敗: エラーコード ” & errReturn
End If
End Function

—

3. 自己複製と一括展開のロジック

実際の現場では、スクリプトファイルを共有フォルダに置き、各端末からそれを呼び出すのが最も効率的です。以下の手順で設計します。

1. 配布元: 共有フォルダ(`\\Server\Deploy\`)にスクリプトを配置。
2. 実行指令: 管理用スクリプトから `ExecuteRemoteCommand` を使い、`cscript.exe \\Server\Deploy\Target.vbs` をキックする。
3. 環境構築: 実行されたスクリプトが、自身の処理を行い、結果をサーバーへ書き出す。

【重要】陥りやすい罠と解決策

  • 権限の壁: WMIは実行元のユーザー権限に依存します。実行端末がドメイン環境にある場合、ドメイン管理者権限で実行するか、適切な認証情報を付与する必要があります。
  • パスの罠: リモート先では、ローカルの `C:\` を参照するのか、UNCパス(`\\Server\Path`)を参照するのかが混乱の元です。常に絶対パスで記述する癖をつけましょう。
  • 非同期実行: WMIの `Create` は、プロセスを起動した瞬間に制御を戻します(非同期)。実行完了を待ちたい場合は、`WScript.Sleep` で待機するか、終了監視のロジックを別途組み込む必要があります。

—

4. プロの視点:安定運用のためのアドバイス

「動けばいい」という段階から、プロのエンジニアへ昇華するために、以下の3点を意識してください。

1. エラーハンドリングを怠るな:
`On Error Resume Next` を多用しすぎないでください。どこでエラーが起きたかを `Err.Number` と `Err.Description` で明示的に拾い上げ、ログファイルに追記する習慣が、後のデバッグ時間を激減させます。
2. 実行ユーザーの隔離:
バッチ実行時は「どのユーザーで動いているか」を `WScript.CreateObject(“WScript.Network”).UserName` で確認し、環境依存による権限エラーを未然に防ぎましょう。
3. 軽量さを武器にする:
VBSの最大の魅力は「依存関係がない」ことです。DLLの登録や複雑なインストールを必要としないコードこそが、最も美しく、最も信頼できます。

—

最後に:自動化は「愛」である

今回解説した手法は、単なる技術の羅列ではありません。手作業で1台ずつ回っていた苦労を、コードの力で解放するための「愛のある設計」です。

まずは、あなたの環境にあるテスト用PC 1台から試してみてください。WMI経由で計算機(`calc.exe`)がリモートで立ち上がった瞬間、あなたはVBSの魔法を手に入れたことになります。

ここをクリアすれば、もうあなたは初学者ではありません。インフラ自動化の第一歩を踏み出した、立派なエンジニアです。不明点があればいつでも相談してください。共に自動化の先にある「自由」を追求しましょう。

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