kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

PowerShellで実行予定のタスクを列挙する

これはPowerShell Advent Calendar 12/14分の記事です。


PowerShell Advent Calendar 2014 : ATND

Windowsのタスクスケジューラ、結構便利に使えます。Windows Server 2003の時代は「もうちょっとなぁ」と思いつつも使っていましたが、Windows Server 2008/Vistaから「なにこれすごい」って状態になって、高価なジョブ管理ソフト買うまでもないような場合において、大変助かりました*1

UNIX系にあるcronのほうが便利なこともあるのですが、cronはいまだに「次の実行日」が表示されないので、たまにしか使わない人は書式間違えると悲惨なことになるので…。

タスクスケジューラを本格的に業務として使うには祝祭日が何とかなればと思いますが、そういうのは後付でスクリプトの中などで考えましょう。ちなみに私はフェイルオーバークラスタでもうまく動くようにさせてました。

さて、本題です。タスクスケジューラのAPIにはWindows Server 2003互換のV1と呼ばれるものと、Vista以降でしか使えないV2と呼ばれるものがあります。コマンドラインツールのschtasks.exeはV1とV2両方対応していますが、V2だけ考えればいいでしょう。コマンドでやるのは…という方向きにはAPIもあります。

Task Scheduler (Windows)

みんな大好きCOMです。タスク作って、トリガー定義して、アクション登録して…結構面倒です。列挙するだけでも大変ですが、そこでPowerShellですよ。

とりあえず、簡単なところで、「時間が指定されているタスクが何時に起動するか」という情報を列挙するワンライナー。業務でスケジュールしようと思うと、「ここが空いてそうだからこの時間に差し込む」ということをしばしば考えます。そういうときに便利です。もちろん、Windowsの標準レポートで出してくれるようになるのも歓迎なので、Microsoftさん待ってます*2

Task Scheduler will run information.

結果はこんな感じ。

f:id:kkamegawa:20141213170257p:plain

時間指定されているタスクは意外と多くありません。なんらかのトリガーが指定されているものが多いようです。

*1:特に「月末」が定義されたのが大きい

*2:ま、自分で作ってもいいくらいのものですが