「セイテク・シス管道場(Web)」では、Windows Serverの要素技術やシステム管理の基本的な部分に焦点を当ててきました。今回は前回の最後のトピックの続き、イベントログとタスクスケジューラの高度な連動について。
イベント時トリガータスクでは引数に変数を渡すことも可能
前回の最後に、イベントログとタスクスケジューラの連動機能についてGUIでできることについて簡単に取り上げました。実は、イベントビューアーから作成したタスクや、イベント時トリガーのタスクでは、プログラムの引数として対象のイベントに関連する値を変数で渡すことができます。その設定はGUIでは行えません。イベント時トリガーが設定されたタスクをファイルにエクスポートし、編集して、インポートすることで実装できます。
イベント時トリガーをファイルにエクスポートすると、XML形式でタスクの設定がファイル化されます(画面1)。

画面1 イベント時トリガーが設定されたタスクをXMLファイルにエクスポートする
エクスポートされたXMLファイルをメモ帳などのテキストエディターで開き、 <EventTrigger>タグの最後の要素としに<ValueQueries>タグを追加します。<ValueQueries>タグの要素としては、XPATH式と値の名前(分かりやすい名前)を定義して上書き保存します。XPATHは、イベントビューアーでイベントのプロパティを開いて、「詳細」タブで確認できます(画面2)。

画面2 EventIDのXPATHはEvent/System/EventID。イベントプロパティの「詳細」タブで確認可能
次の例は、システムログに記録されるイベントID 7036のサービスの開始/停止イベントをトリガーとするタスクで、日時(UTC)、イベントID、イベントプロバイダー、イベントソース、イベントレベル、イベントデータ(サービス名と状態)を変数 $(値の名前) として引数に渡すXMLファイルの設定です(画面3)。引数の設定はタスクをインポート後にGUIでもできますが、この例のように、XMLファイル内の<Exec>タグ内の<Arguments>タグの要素として直接書くこともできます。
|
・・・ <EventTrigger> <Enabled>true</Enabled> <Subscription><QueryList><Query Id="0" Path="System"><Select Path="System">*[System[Provider[@Name='Service Control Manager'] and EventID=7036]]</Select></Query></QueryList></Subscription> <ValueQueries> <Value name="EventID">Event/System/EventID</Value> <Value name="Provider">Event/System/Provider/@Name</Value>
<Value name="EventSource">Event/System/Provider/@EventSourceName</Value> <Value name="Level">Event/System/Level</Value> <Value name="DateTime">Event/System/TimeCreated/@SystemTime</Value> <Value name="Service">Event/EventData/Data[@Name='param1']</Value> <Value name="Status">Event/EventData/Data[@Name='param2']</Value> </ValueQueries> </EventTrigger> ・・・
<Principals> <Actions Context="Author"> <Exec> <Command>powershell.exe</Command> <Arguments>-File E:\tools\demo.ps1 "$(DateTime)" "$(EventID)" "$(Provider)" "$(EventSource)" "$(Level)" "$(Service)" "$(Status)"</Arguments> </Exec> </Actions>
|

画面3 エクスポートしたタスクのXMLを編集して、インポートする
編集したXMLファイルを上書き保存したら、タスクスケジューラでエクスポート元のタスクをいったん削除し、編集後のXMLファイルをインポートして同じ場所にタスクを復元します(画面4)。

画面4 元のタスクを削除してから、編集後のXMLファイルをインポートしてタスクを登録する
以上の設定を行うことで、イベントトリガーが発動すると、イベントの値の変数 $(値の名前) が展開され、プログラム(この例ではPowerShellスクリプト)に渡されるようになります(画面5)。
画面5 イベント時トリガーが発動すると、プログラム(この例ではdemo.ps1)が自動実行され、引数が渡される。「demo.ps1」は渡された引数を表示するだけのスクリプト(日時はUTC→ローカル時間変換)
パフォーマンスモニターもタスクと連動可能
vol.204でも少し触れましたが、パフォーマンスモニターのデータコレクターセットにもタスクスケジューラとの連動機能があります。この機能については、次回、もう少し詳しく説明します。
また、タスクスケジューラでは以前、タスクのアクション(操作)として、「電子メールの送信」と「メッセージの表示」が利用可能でした。つまり、かつてはイベントビューアー、パフォーマンスモニター、タスクスケジューラを組み合わせることで、イベント(パフォーマンスカウンターの値やイベントログ)駆動型で、メールによるアラート通知を含む運用タスクの自動化が可能でした。メール送信機能が廃止された背景には、長期のスパンで運用されるサーバーの管理ツールが、日々、セキュリティ強化が進むインターネットメールの変化に対応できないということもあったのでしょう。現在でも工夫次第でタスクによるメール送信を実現することは可能ですが(次回以降紹介します)、最新のメールセキュリティに対応したメール送信機能を持つ運用管理ツール(弊社BOM for WindowsはMicrosoft 365のOAuth2認証に対応しています)を導入するのが簡単ですし、運用管理機能もWindows Serverの標準機能よりも圧倒的に優れています。
セイテク・シス管道場(Web) (1) |・・・|(10)|(11)|(12)|(13)|(14)|(15)|(16)|(17)|(18)|(19)