2007.08.27

Windowsタスクの制御に関するメモ

WindowsXPや 2003Server には Windowsのタスク(スケジュール)を制御するコマンドが追加されていて、
 schtasks /Run /TN タスク名
とすることで、登録されているタスクを即実行できたりします。
ついでに
 schtasks /Run /S マシン名 /U ユーザー名 /P パスワード /TN タスク名
とすることで、別のマシンに登録しているタスクをリモート呼び出ししたりもできます。

これをうまいこと使うと、例えば特に定期スケジュールを組んでいないタスクを
実行するユーザーを administrator なんかで登録しておくだけで、
他のマシンに何かを処理依頼したり、
呼び出しをするユーザーと実行するユーザーとの権限を分離できたりするわけです。
impersonateを考えるよりよっぽど直感的ではありますまいか。


しかし、困ったことが2つあって、
すでに起動中のタスクを再度キックした場合、見た目には「既に実行中」というメッセージが出るものの、
コマンドの戻り値は正常と同じ 0が返ってきてしまいます。プログラムの内部に組み込むには少々クセものです。

また、タスクを起動する(呼び出し元の)ユーザーは本来 Backup Operatorsグループ等に所属していれば良いはずなのですが、
実際には Administratorsグループに所属していないと「アクセスが拒否」されてしまうような気がします。
(調べる限り、タスク自体のセキュリティの権限を呼び出し元ユーザーに許可したり、
ローカルセキュリティポリシーのユーザー権利の割り当てで、Administratorsグループが設定
されている箇所全てに呼び出しユーザーを追加してもダメでした)
権限分離といっても呼び出し元には最低限 Administratorsグループの権限が必要になってくるのかも?

んんん・・・。いまひとつ。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa