Batch計画タスク情報の取得

3213 ワード

ソース:Windows計画タスクステータスモニタリング

需要


Windows計画タスク情報を収集します.手順は次のとおりです.
  • スクリプトによって条件に合致する計画タスクのリストを取得する.
  • スクリプトを使用して、指定された計画タスクのステータスと前回の実行結果をクエリーします.

  • ぶんせき


    実は上の手順があれば、batchのほうがずっとやりやすいです.
    具体的な考え方は以下の通りです.
  • Windowsで計画タスク情報を取得するコマンドがあることを確認する.
  • コマンド出力の内容が需要を満たしているかどうかをテストします.
  • コマンド出力内容をクリーンアップし、必要な結果に簡略化する.
  • テスト、リリース.

  • ソリューション


    分析結果があれば、やりやすいので、3つのステップに分けます.
  • テスト計画タスクコマンド;
  • 計画タスクの発見スクリプトを作成する.
  • 計画タスク情報の取得スクリプトを作成する.

  • タスクを計画するコマンド


    マイクロソフトの公式に計画タスクの命令を調べたところ、Windowsにはschtasks.exeというプログラムが提供されていた.勉強の下で使う.
    基本情報取得(/nhパラメータは使用できません):
    schtasks.exe /query  | findstr “Taskname1 Taskname2"
    Folder: \
    TaskName                                 Next Run Time          Status
    ======================================== ====================== ===============
    Taskname1                                N/A                    Disabled
    Taskname2                                N/A                    Disabled
    

    すべての計画タスクの人物名、ステータス、および最終実行結果を取得します.
    for /f "tokens=2,5,9" %a in ('schtasks.exe /query /v /nh') do @echo %a %b %c
    

    特定の計画タスクのフィルタを追加するには、次の手順に従います.
    for /f "tokens=2,5,9" %a in ('schtasks.exe /query /v /nh') do @echo %a %b %c | findstr "taskname1 taskname2 …"
    

    上記コマンドがbatchに含まれる場合、上記コマンドの変数は%、例えば%%aを加える必要があります.ただし、前回の実行結果のフィールドは16進数、出力は10進数であり、変換に注意してください.一部の計画タスクの名前にスペースが含まれているため、コメントを抽出することも考えられます.

    計画タスクの自動検出


    使用方法:schtasksdiscovery.bat "name1 name2 name3"
    REM  
    REM schtasksdiscovery.bat "name1 name2 name3"
    @echo off
    @setlocal enabledelayedexpansion
    REM IMPORTANT!!! ext is bat.
    REM discovery all want monitored scheduled tasks name.
    set "str={ ^"data^":["
    if NOT [%1]==[] (set "para=%*") else set "para=none"
    for /f "tokens=2 delims=," %%a in ('schtasks.exe /query /v /nh /fo csv ^| findstr %para%') do set "str=!str! {"{#SCHTASKNAME}^":^%%a^},"
    if "%str:~-1,1%"=="," set "str=%str:~0,-1%"
    set "str=%str%  ] }"
    echo %str%
    

    計画タスク情報の収集


    使用方法:schtaskstat.bat taskname
    REM  
    schtaskstat.bat taskname
    @echo off
    REM IMPORTANT!!! ext is bat.
    REM get status of specified task
    for /f "tokens=5,9" %%a in ('schtasks.exe /query /v /nh /fo csv^| findstr "%1"') do @echo %%a %%b
    

    その他


    このスクリプトは、Windows 2003、2008で実行されます.他に解決できなかった問題についてお話しします.

    Language Packの問題


    一部のマシンはローカル言語パッケージの問題で、schtasks.exe /queryコマンドを実行するとエラーが発生します.
    エラー:カラムリソースをロードできません.
    このとき、コマンドラインであれば、chcp 437を使用し、修正スクリプトの2,5,92,5,10とすることができる.正しい結果が得られる.
    しかし、chcp 437が実行されると、新しいサブプロセスが開かれることがわかります.この方法は少なくともZabbixでは正常に使用できず,依然として文字化けしていることを試験した.chcpがどのように加入しても、正常に有効になりません.

    結果は問題を返します


    一部のシステムでは実行時にのみステータスRunningが返され,その他の場合は空であるため,/fo csv方式を用いて処理を行うことが考えられる.