毎日一日中実行されるWindows スクリプトがあります。毎朝午前 0 時 5 分powershell
に開始され、アプリケーションとして (つまり、デスクトップのコンソールで) 実行され、毎晩午前 0 時 5 分頃に自動的にシャットダウンします。task manager
powershell
アプリケーションとして実行すると、いくつかの利点があります。実行中であること、動作中であること (画面にメッセージが連続してスクロール表示される) を簡単に確認でき、ctrl+c
いつでも押すことで強制的に正常なシャットダウンを実行できます。
これを開始する Windows タスクは、run only when user is logged on
アカウントが常にログオンしているため、99% の確率で問題ないように構成されています。このオプションは、タスクが常にデスクトップ上のアプリケーションとして実行されることを意味します。
時々、停電やアップデートにより再起動(アカウントのログオフ)が発生します。PowerShellタスクを再起動したいので、タスクに「システム起動時」の2番目のトリガーを追加しました。実験では、これがのみオプションrun only when user is logged on
を に変更すると機能しますrun whether user is logged on or not
。ただし、このオプションには落とし穴があり、PowerShell プロセスはタスク マネージャーでbackground process
ではなくとして表示されますapp
。そのため、スクリプトが画面上のウィンドウで実行されなくなり、進行状況を監視することも、正常にシャットダウンすることもできなくなります (task manager
の後に を実行するのがEnd Task
唯一のオプションです)。
タスクマネージャーでスクリプトをバックグラウンドプロセスではなくアプリとして常に実行したいので、
- 再起動時に自分のアカウントがログオンされ、スクリプトがアプリとして起動されるようにタスクマネージャーを構成するか、
- タスク マネージャーを構成して、自分のアカウントがログオンしている場合はスクリプトがアプリとして起動され、自分のアカウントがログオンしていない場合は (つまり、電源障害後) (そしてそのときのみ) バックグラウンド プロセスとして起動されるようにします。
または、別の解決策はありますか? 基本的に、スクリプトを常に実行しておく必要があり、デスクトップ上のウィンドウでスクリプトの実行を確認して、スクリプトが何を実行しているかを確認できるようにする必要があります。
答え1
わかりました。私自身も答えを見つけたと思います。
2 つの異なるトリガーを持つ 1 つのタスクの代わりに、それぞれ異なるトリガーを持つ同じタスクの 2 つの異なるバージョンを作成しました。
- 1 つは毎朝午前 0 時 5 分に実行されるように設定されており、 に設定されています
run only when user is logged on
。これにより、通常の操作の 99% が処理されます。タスクは、デスクトップ上のウィンドウでフォアグラウンド アプリケーションとして実行されます。 - もう 1 つは に設定され
run at system startup
、これは に設定されていますrun whether user is logged on or not
。これにより、予定外の停止後にジョブを開始する必要があるという非常に奇妙な事態に対処します。これはバックグラウンド プロセスとして実行されます。これは煩わしいですが、少なくとも実行されています。