【入門編】【Windowsトースト通知送信】WScript.Shell から PowerShell を裏で呼び出しリッチなOS通知を発行する手法 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは!VBScriptの世界へようこそ。
業務を自動化していると、こんな風に思ったことはありませんか?

「処理が終わったことを、画面の真ん中でポップアップ(`MsgBox`)を止めて知らせてほしくないんだよなぁ……。夜間にバッチ処理がエラーで止まっても、朝まで気づけないのは困る!」

そうなんです。VBScript標準の `MsgBox` は、誰かが画面をクリックして「OK」を押すまでプログラムの実行が完全に止まってしまいます。完全自動化を目指す私たちにとって、これは最大のボトルネックですよね。

そこで今回は、Windows 10/11の標準機能である「トースト通知(画面の右下からスッと出てくるリッチな通知)」をVBScriptからスマートに呼び出す極意を伝授します!

ここをクリアすれば、あなたのスクリプトは一気に「モダンなシステム」の仲間入りですよ。さあ、一緒に扉を開けていきましょう!

なぜVBScriptからPowerShellを呼ぶのか?

実は、VBScript単体ではWindowsのトースト通知(Action Center API)を直接叩くことができません。VBScriptは歴史ある言語ですが、現代の洗練されたOS機能には少し手が届かないのです。

そこで登場するのが「PowerShellとのハイブリッド連携」です。
VBScriptの得意な「手軽なファイル実行・WSH制御」から、OSの奥深くを操作できるPowerShellのコマンドを裏側でバトンタッチして実行する。この合わせ技を使えば、VBScriptの弱点を完璧にカバーできるのです。

[VBScript] ──(裏で命令)──> [PowerShell] ──> [Windows トースト通知]
(WScript.Shell) (Windows API) (画面右下に表示!)

実践!リッチなトースト通知を発行するVBScript

百聞は一見に如かず。まずは以下のコードをメモ帳にコピーして、デスクトップなどに `toast_sample.vbs` という名前で保存してみてください。
(拡張子が `.txt` にならないように注意してくださいね!)

‘ ==============================================================================
‘ スクリプト名: toast_sample.vbs
‘ 概要: WScript.Shell を経由して PowerShell を呼び出し、Windowsトースト通知を発行する
‘ ==============================================================================

Option Explicit

Dim wshShell, psCommand, scriptDir
Dim notificationTitle, notificationMessage

‘ 1. オブジェクトの生成(WSHの心臓部)
Set wshShell = WScript.CreateObject(“WScript.Shell”)

‘ 2. 通知に表示する内容を定義
notificationTitle = “【VBScript 業務自動化完了】”
notificationMessage = “すべてのデータ処理が無事に完了しました。お疲れ様でした!”

‘ 3. PowerShellに渡すワンライナー(通知用スクリプト)を構築
‘ ※見やすさのため複数行に分けていますが、裏では強力な.NETのトーストAPIを叩いています
psCommand = “PowerShell -NoProfile -ExecutionPolicy Bypass -Command “”” & _
“[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null; ” & _
“$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02); ” & _
“$textNodes = $template.GetElementsByTagName(‘text’); ” & _
“$textNodes.Item(0).InnerText = ‘” & notificationTitle & “‘; ” & _
“$textNodes.Item(1).InnerText = ‘” & notificationMessage & “‘; ” & _
“$toast = [Windows.UI.Notifications.ToastNotification]::new($template); ” & _
“[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier(‘VBScript Automation’).Show($toast);” & _
“”””

‘ 4. バックグラウンド実行(False:非同期, 0:ウィンドウ非表示)の極意
‘ 画面に黒いコマンドプロンプトやPowerShellの窓を出さずに、完全に裏で処理を実行します
wshShell.Run psCommand, 0, False

‘ 5. オブジェクトの解放(メモリ管理の作法)
Set wshShell = Nothing

‘ 完了の足跡
WScript.Echo “トースト通知の送信指令を出しました!右下を確認してください。”

これをダブルクリックして実行してみてください。画面の右下に、スッとスタイリッシュな通知が表示されたはずです!しかも、VBScript側の `MsgBox` と違って、処理を止めることなく裏でこっそり実行されます。

コードの核心をエンジニア目線で解説

初心者のうちは、呪文のように見えるコードもあるかもしれませんが、ポイントを押さえれば怖くありません。特に重要な3つの要素を解説します。

1. `WScript.Shell` の活用

VBScriptでOSを操作する際の相棒がこのオブジェクトです。環境変数の取得や、外部アプリの起動など、OSと対話するための窓口となります。

2. `wshShell.Run psCommand, 0, False` のマジック

ここが今回の最も重要なテクニックです。`Run` メソッドの引数に注目してください。

  • `0` (第2引数):ウィンドウを完全に隠す(`WindowStyle`)。これで「黒い画面がチラッと映る」というダサい現象を防げます。
  • `False` (第3引数):非同期実行(`bWaitOnReturn`)。PowerShellの処理が終わるのを待たずにVBScriptが先に進むため、全体の処理速度が落ちません。

3. PowerShellのWindows Runtime(WinRT)呼び出し

PowerShellの強力なところは、C#などの.NETコードをそのままその場で動かせる点です。今回はWindows 10/11が標準で持っている `ToastNotificationManager` というクラスを直接呼び出すことで、サードパーティ製のツールを入れることなく、純粋なOS機能としてのトースト通知を実現しています。

現場でありがち!陥りやすい罠と対策

この連携テクニックを使う際、現場のエンジニアがよくハマる「落とし穴」がいくつかあります。あらかじめ知っておけば怖くありません。

  • 罠1: ダブルクォーテーション(”)の迷子
  • 原因: VBScriptの中でPowerShellの文字列を組み立てる際、ダブルクォーテーションの中にダブルクォーテーションが入るため、構文エラーになりがちです。
  • 対策: 基本はシングルクォーテーション(`’`)をPowerShell側で使い、VBScriptの連結には `&` を正しく使い分けましょう。上記のサンプルコードは、そのエスケープ処理が美しく決まった形になっています。
  • 罠2: 実行ポリシー(ExecutionPolicy)で弾かれる
  • 原因: セキュリティが厳しいPC環境だと、PowerShellのスクリプト実行がブロックされることがあります。
  • 対策: コマンド内に `-ExecutionPolicy Bypass` を仕込んでいるため、この制限をスマートに回避できます。

まとめ

いかがでしたか?
今回は、VBScriptの基本である `WScript.Shell` を用いて、モダンなPowerShellおよびWindowsトースト通知をバトンタッチで動かす手法を解説しました。

「古い言語だからできることが少ない」と諦める必要はありません。このように現代のOS機能と組み合わせることで、VBScriptはまだまだ現役の強力な自動化ツールとして輝き続けます。

ここをクリアできれば、あなたのVBScriptスキルはもう初級者の域を脱しています。ぜひ日々の業務自動化に組み込んで、スマートな通知ライフを満喫してくださいね!それでは、また次の知見でお会いしましょう。バッチリ使いこなしてください!

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