バッチファイルを管理者権限で実行したい

Windows2008サーバを使用した案件で、ローカルのAdministraotrを使用しないでセットアップを行って欲しいと
言われることが多々あります。お客様の情報セキュリティーポリシーの中に、

  • ビルドインアカウントにて作業を行ってはいけない
  • 推測可能なユーザIDを使用してはならない

というような事項が載っているらしく、これらを守って導入〜運用作業を行って欲しいと。
Windows2008からはUACという仕組みが導入されています。
この仕組みにより、あるプログラムを管理者権限で実行するためには、右クリックメニューの
「管理者として実行」という操作が必要になります。

この操作、インタラクティブな作業であれば特に問題ないのですが、JP1などのジョブ管理サーバなどから
バッチファイルを実行する場合には致命的です。
もちろん、全てのバッチファイルが管理者権限を必要とするわけではないのですが、システム導入なんかをしていると
1つや2つは必ず管理者権限でないと正常に動作しないバッチファイルが存在するのです。
今回もそんなバッチファイルに出くわしました。。。
今回のシステム導入では、Hulftというファイル転送のアプリケーションがあるのですが、
その中で使用されるコマンドでutligenというものがあります。
このコマンドは、定義情報などを出力することができるため、バックアップスクリプトに書かれていました。
しかし、このバッチファイルは、「管理者として実行」だと問題ないのですが、
JP1から実行するとバックアップが取得できません。

今回は回避策として、Windows2008のタスクスケジューラー+Windowsイベントログ+WSHを使用してみました。
Windows2008タスクスケジューラーでは、バッチファイルを管理者として実行可能です。
これだけではジョブ連携できないのですが、このWindowsタスクではイベントログをトリガーとして実行できる機能があります。
Windowsイベントログに出力するバッチファイルをWSHで作成し実行できれば、うまくいくのではないかなと。



タスクの作成にて、「最上位の特権で実行する」にチェックを入れておきます。
バックグラウンドで実行される想定なので「ユーザがログオンしているかどうかにかかわらず実行する」にします。

新しいトリガにて、タスクの開始を「イベント時」にします。
ログをアプリケーションにし、ソースをWSH、イベントIDを0にします。

あとの設定は省略しますが、残っているのは実行したいバッチファイルを指定するくらいです。
そしてWSHは以下のような感じです。

Set obj = Wscript.CreateObject("Wscript.Shell")
obj.LogEvent 0,"Hulft backup trigger..."
Set obj = Nothing

上のWSHは、「管理者として実行」としなくても想定どおりWindowsイベントログにログを出力してくれます。
よってWindowsタスクスケジューラに設定したバッチファイルが管理者権限にて動作します。

ただ、問題点が残りました。
WSHではイベントIDを指定できない点です。
このままでは、Windows2008サーバ上でイベントログを出力するようなWSHスクリプトが動くたびに
バックアップが実行されてしまう点です。
任意のイベントIDをWSH側で指定できるが、Windowsタスクスケジューラ側でログのメッセージでフィルタできれば
もう少し使いやすいですが。。。
Web上を検索すると、イベントログを出力するようなフリーソフトがいくつか出回っているので、
それらのお力をお借りするしかないのでしょうか。。。


コマンドラインからイベントを生成するWindows標準のコマンド(eventcreate)もあり、
こちらはイベントIDを指定できるのですが、このコマンドは「管理者として実行」しないと
実行できないので、本末転倒です。。。


何かいい解決方法が他に見つかれば、また投稿したいと思います。。。。