指定した実行ファイルを呼び出すスケジュールがタスクスケジューラーにあるかどうかをコマンドでサクっと調べる

重たい Windows を少しでも軽くするため、(余計なプロセスを起動しやがる)タスクスケジュールを停止させたい。しかし、「compattelrunner.exe を起動しているスケジュールはどれだ」ってのがわかりづらい。タスクスケジューラーから一つずつ見るのは苦だ。

というわけで、コマンドでサクっと探せないか検討した。

結論

  • schtasks コマンドで概ね実現できた
  • ただし「複数のコマンドラインを起動するスケジュール」については、このコマンドでは表示されないという弱点がある

前提

  • Windows 7

基本形

schtasks コマンドを使う。

$ schtasks /query /fo csv /v
"ホスト名","タスク名","次回の実行時刻","状態","ログオン モード","前回の実行時刻","前回の結果","作成者","実行するタスク","開始","コメント","スケジュールされたタスクの状態","アイドル時間","電源管理","ユーザーとして実行","再度スケジュールされない場合はタスクを削除する","タスクを停止するまでの時間","スケジュール","スケジュールの種類","開始時刻","開始日","終了日","日","月","繰り返し: 間隔","繰り返し: 終了時刻","繰り返し: 期間","繰り返し: 実行中の場合は停止"
...

あとはこれをテキストエディタ等に貼り付けて、実行ファイル名で検索する。

コマンドだけで完結する

パイプで findstr に渡す。

$ schtasks /query /fo csv /v | findstr /i "compattelrunner.exe"
"XXXXXXXXXX","\Microsoft\Windows\Application Experience\ProgramDataUpdater","2018/12/14 0:48:21","準備完了","対話型/バックグラウンド","2018/12/13 1:08:48","0","N/A","%windir%\system32\compattelrunner.exe -maintenance", ...

ただし findstr はクセが強い上に貧弱なので、grep コマンドがあるならそちらを使うべき。あるいは素直にテキストエディタで頑張る。

(注意点) "複数のアクション" の罠

各スケジュール設定が実行するコマンドラインは、タスクスケジューラーでいうと「プロパティ > 操作タブ」内に相当する(もっというと「プログラムの開始」操作)が、ここが複数指定されていると、上記の schtasks /query には "複数のアクション" とだけ表示される

言い換えるとコマンドラインが見えないので検索してもヒットしない。

この問題は schtasks コマンドだけでは解決できないっぽい。PowerShell を使えばできるみたいだが……。

参考: windows 7 - How to make SCHTASKS /Query display the "multiple actions" attribute in query result? - Super User