web-dev-qa-db-ja.com

Windowsタスクスケジューラ、タスクが実行されていない場合はタスクを実行しますか?

タスクが常に実行されていることを確認するにはどうすればよいですか?

私はspeedfanを使用してファンを制御していますが、クラッシュしたり、再起動する必要がある場合があります。正しく機能していないために手動でspeedfanを終了すると、自動的に再開されません。

タスクスケジューラを使用して、実行されていない場合でも常に実行されるようにするにはどうすればよいですか?

現在、ログオンするたびに実行するように設定されており、タスクが失敗しても再起動しない場合は再起動するように設定されています。

ありがとう

4
George Othen

タスクスケジューラ-実行されていない場合はタスクを実行します

以下のようなバッチスクリプトを使用し、 Tasklist および FindStr を使用して、SpeedFanのEXE名がメモリ内で実行されているかどうかを確認できます。以下のロジックで Start EXEがメモリで実行されていない場合に実行されます。


バッチスクリプトの例

SpeedFan.exeの値は、アプリの起動時に実行されるEXEファイルの実際の名前に置き換えてください。SET EXEName=SpeedFan.exeで何かが異なる場合は、正しく機能します。

EXEへの完全な明示的パスが、実際のパスの以下のロジックにも含まれていることを確認する必要があるため、(SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe内の)それをアプリEXEの実際のパスに置き換えます。 =記号の後は、それを変更する場所です。

これをタスクスケジューラで1分30秒ごとに実行するようにスケジュールしました。ただし、このプロセスで実行されているかどうかを確認し、実行されていない場合は開始することがよくあります。

@ECHO OFF

SET EXEName=SpeedFan.exe
SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe

TASKLIST | FINDSTR /I "%EXEName%"
IF ERRORLEVEL 1 GOTO :StartSpeedFan
GOTO :EOF

:StartSpeedFan
START "" "%EXEFullPath%"
GOTO :EOF
5
Pimp Juice IT

はい。ただし、すべてのプログラムがこれを行うわけではないため、これらのタイプのイベントを監視するには、まずSysmonをインストールする必要があります。私の知る限りでは。

これにより、ProcessTerminateイベントで収集したアプリを再起動し、必要に応じていつでも再起動できます。バッチスクリプトを使用する場合のように、30秒に制限されることはありません。

  1. コーヒーを飲み、上のリンクからダウンロードしてください。
  2. DOSまたはPowerShellの_Sysmon.exe -i_を使用してインストールします。
  3. 再起動する必要はありません。

これが完全に行うことは ここにあります です。

TL; DR

システムモニター(Sysmon)は、Windowsシステムサービスおよびデバイスドライバーであり、システムにインストールされると、システムの再起動後も常駐し、システムアクティビティを監視してWindowsイベントログに記録します。


これでインストールされました_Event Viewer_にあります。

  • Vista以降イベントは_Applications and Services Logs/Microsoft/Windows/Sysmon/Operational_に保存されます

  • 古いシステムの場合イベントは_System event log_に書き込まれます。


この例では、 stickiesおよびWindows 10 Proを使用します。

N.B。タスクスケジューラでコードを使用する前に、まず_Event Viewer_でテストすることをお勧めします。

  1. _Event Viewer_を開く
  2. Event Viewer (Local)を右クリックします
  3. _Create Custom View..._
  4. _XML tab_をクリックします
  5. チェックボックスをオンにします_Edit query manually_
  6. これは stickies プログラムの例です。ニーズに合わせてC:\Program Files (x86)\Stickies\stickies.exeを変更するだけです。各セクションがSysmonに対して行うことを、できる限り以下で説明します。

    クエリの例:

    _<QueryList>
      <Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
        <Select Path="Microsoft-Windows-Sysmon/Operational">
          *[EventData[Data[@Name='Image'] = 'C:\Program Files (x86)\Stickies\stickies.exe']]
          and
          *[System[(EventID=5)]]
        </Select>
      </Query>
    </QueryList>
    _

    (1)_[EventData[Data[@Name='Image'] = 'validFullPath.exe']]_はパスのクエリです。これは、プログラムファイル_.exe_の場所を検索します。 _*_などのワイルドカードを使用する方法がないため、これは完全パスである必要があります

    (2)andおよびステートメントも一致します...

    (3)*[System[(EventID=5)ProcessTerminateのイベントIDです。

    (4)正しく実行された場合、その特定のプログラムが最後に終了したときのプロセスがメインGUIに表示されます。アプリを開いて閉じない場合は、イベントビューアUIの最上部に_Number of events:... New event available_が表示され、F5キーを押して更新すると、上部に新しいイベントエントリが表示され、問題なく動作するはずです。

    • 詳細については、 Sysmon ページの Events および Event Filtering Enteries セクションを参照してください。
    • イベントフィルタリングの詳細については、ウィキペディアの XPath 1.0を使用したフィルタリング を参照してください。
    • 間違えた場合は、この警告メッセージ_The Event Log query specified is invalid_が表示されます。
    • それは害を及ぼさないので、フレットしないでください。 もう一度やり直してください

これでクエリが並べ替えられました。タスクスケジューラを設定するだけです。添付画像の以下の手順を参照してください。

タスクスケジュール図のステップ1〜8

タスクスケジュールステップ図1-8

図のステップ4に関する最後の注意:

  1. 遅延を要件に設定することが重要です。私の場合は_2 seconds_です。
  2. 次に、_Repeat task..._をTSで許可されている最小値に設定してから、期間を2秒少し長くします。 (アプリごとにこれをテスト)
  3. _Stop all running..._チェックボックスを使用しないでください。使用すると、厄介な停止/開始ループが発生します。

これを理解するのに少し時間がかかりましたが、私がやったことをとてもうれしく思います!、これがお役に立てば幸いです

0
Ste