FAQ に Task Scheduler から batch file が実行できないというのがありますが、これは Task Scheduler で起動される user の logon type が違うために発生します。
Windows に logon する時その user が所属している group を access token に格納し、その access token を持った process を作成します。その時に格納されるものは、mmc とかで見える group だけではなく、logon type に紐づいた group も一緒に格納されます。
通常の logon (対話的ログオン: interactive logon) の場合には、"NT AUTHORITY\INTERACTIVE" が access token の group infomation に格納されます。
Windows Server 2003 R2 で対話的に logon した場合の "whoami.exe" の結果(抜粋)
グループ名 種類 SID 属性
===================================== ==================== ============ ========================================================
Everyone よく知られたグループ S-1-1-0 固定グループ, 既定で有効, 有効なグループ
BUILTIN\Administrators エイリアス S-1-5-32-544 固定グループ, 既定で有効, 有効なグループ, グループ所有者
BUILTIN\Users エイリアス S-1-5-32-545 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\INTERACTIVE よく知られたグループ S-1-5-4 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\Authenticated Users よく知られたグループ S-1-5-11 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\This Organization よく知られたグループ S-1-5-15 固定グループ, 既定で有効, 有効なグループ
LOCAL よく知られたグループ S-1-2-0 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\NTLM Authentication よく知られたグループ S-1-5-64-10 固定グループ, 既定で有効, 有効なグループ
"NT AUTHORITY\INTERACTIVE" が確認できると思います。
次に Task Scheduler で起動した場合の状況を見てみましょう。
グループ名 種類 SID 属性
================================ ==================== ============ ========================================================
Everyone よく知られたグループ S-1-1-0 固定グループ, 既定で有効, 有効なグループ
BUILTIN\Administrators エイリアス S-1-5-32-544 固定グループ, 既定で有効, 有効なグループ, グループ所有者
BUILTIN\Users エイリアス S-1-5-32-545 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\BATCH よく知られたグループ S-1-5-3 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\Authenticated Users よく知られたグループ S-1-5-11 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\This Organization よく知られたグループ S-1-5-15 固定グループ, 既定で有効, 有効なグループ
LOCAL よく知られたグループ S-1-2-0 固定グループ, 既定で有効, 有効なグループ
NT AUTHORITY\NTLM Authentication よく知られたグループ S-1-5-64-10 固定グループ, 既定で有効, 有効なグループ
"NT AUTHORITY\INTERACTIVE" が存在せず、"NT AUTHORITY\BATCH" が存在しますね。
でも、これ対象の実行 user が interactive logon していないからなんです。実は、Task Scheduler からの実行は、実行予定の user がすでに logon している場合には、その access token をそのまま利用します。Task Scheduler から job を起動した場合、必ずしも batch logon するとは限らないことに注意してください。
で本題ですが、batch file の拡張子 (*.bat, *.cmd) は "cmd.exe" に関連付いています。ということで "cmd.exe" の ACL を覗いてみましょう。
BUILTIN\Administrators:F
NT AUTHORITY\INTERACTIVE:R
NT AUTHORITY\SERVICE:R
NT AUTHORITY\SYSTEM:F
NEVILLE\TelnetClients:R
Administrators の member なら問題なく実行できますが、それ以外の一般 user の場合には、interactive logon が必須になっています。ただし、batch job を batch file で書きたいという要望は結構あると思います。
なら、Administrators の member で実行するという手もあるんですが、こいつはご法度です。というのは、最低限の権限で実行すべき security の原則を満たしていないからです。どうしても Administrators の member でしか出来ない処理を除き、Administrators の member は使うべきではないです。
では、どうすればよいか?
1つの方法としては、その batch job を実行する user を "cmd.exe" の ACL に追加する方法です。この方法は、その user が batch job のみを実行することが保障されている状況のみ利用すべきです。もし、その user が IIS 等で使われると OS command injection を食らう可能性があります。また、batch job の実行 user が増えてくると大変というのもありますね。
もう一つの方法としては、"NT AUTHORITY\BATCH" 読み取りと実行を "cmd.exe" の ACL に設定してやる方法です。こちらが個人的にはお勧めです。
Windows Server 2003 ではこのように logon type によって access control を行っているものが多いので、logon type を常に意識するようにしましょう。