====== タスクスケジューラー ======
各タスクは多重起動されない(繰り返し実行する設定でも現在のタスクが終了しない限り、次のタスクは実行されない)
===== ログが出力されない場合 =====
原因は、作業フォルダの設定が無いため\\
作業フォルダの設定は、実行するプログラムを指定する際にある「開始(オプション)(T):」にログを出力するフォルダを指定する。\\
参照:[[http://tips.recatnap.info/wiki/Win%E3%81%AE%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%BF%9C|Winのタスクスケジューラが実行されないときの対応]]
もしくは、実行するプログラムがバッチファイルであれば、バッチ内で下記コードを記述してカレントフォルダを指定する。
cd /d %~dp0
===== 繰り返し時間をプルダウン以外にしたい場合 =====
プルダウン・リストボックスにない間隔は、「1234 秒間」「12 分間」「3 時間」「01:23:45」といったように直接入力できる。\\
* [[http://www.atmarkit.co.jp/ait/articles/1007/30/news111.html|Windowsのタスクスケジューラーで数分おきにプログラムを繰り返し実行する]]
* [[https://tech-mmmm.blogspot.com/2017/12/1.html|タスクスケジューラーを使って1分間隔で実行するタスクを作成する方法]]
===== 継続時間の仕様 =====
タススケジューラーの仕様\\
https://docs.microsoft.com/ja-jp/windows/win32/taskschd/repeating-a-task
繰り返し間隔が1分、繰り返し時間が4分であるトリガーを含むタスクを登録すると、タスクは5回開始されます。5回の繰り返しは、次のパターンで定義できます。
- タスクは最初の1分の始めに始まります。
- 次のタスクは最初の1分の終わりに始まります。
- 次のタスクは2分の終わりに始まります。
- 次のタスクは3分の終わりに始まります。
- 次のタスクは4分の終わりに始まります。
毎日6:00から繰り返し間隔1時間で4:00と5:00の監視は外したい場合に継続時間22時間とすると4:00の監視は動作してしまうので、継続時間は想定より1回分少ない21時間で設定する。\\
※設定を継続時間1日から22時間に変更した初回は3:00の監視が動作せず、次の日は4:00の監視は動作した。
===== コマンドプロンプト画面を表示 =====
全般タブのセキュリティオプションで「ログオンしているときのみ実行する」とする。\\
タスクマネージャーで、「Console」ユーザーにメッセージ送信する。
逆に「ログオンしているかどうかにかかわらず実行する」になっていれば、必ずバックグラウンドで実行されるので、コマンドプロンプトの姿を見ることはできません。
===== PowerShellの青い画面を非表示 =====
タスクスケジューラーでPowerShellを動かすと一瞬青い画面が表示される。これを非表示化したい。
conhost.exe --headless を使用することで、powershell の一瞬青い画面が表示されなくなります。\\
[[https://yoiegao.net/powershellスクリプトを非表示で実行するための効果的な/#toc10|PowerShellスクリプトを非表示で実行するための効果的な方法と手順 - conhost.exeを使った方法]]
==== サンプル ====
^プログラム|conhost.exe|
^引数の追加|--headless powershell -NoProfile -ExecutionPolicy Bypass D:\web_projects\wh_rdp\GetClientName.ps1|
^開始|D:\web_projects\wh_rdp|
NoProfileは、PowerShellの実行時に読み込む環境情報を読み込まないため、起動が多少速くなる
開始(オプション)のパスはPowerShellスクリプトの作業用の「カレントディレクトリ」を指定するため
==== タスクスケジューラーのフォルダ作成 ====
[[https://devblogs.microsoft.com/scripting/use-powershell-to-create-scheduled-tasks-folders/|Use PowerShell to Create Scheduled Tasks Folders]]
ルート直下に「Test」フォルダ作成を作成する。
$scheduleObject = New-Object -ComObject schedule.service
$scheduleObject.connect()
$rootFolder = $scheduleObject.GetFolder("\")
$rootFolder.CreateFolder("Test")
===== タスクスケジューラーのエラーコード =====
^コード^説明^
|0 (0x0)|この操作は正しく終了しました。|
|1 (0x1)|関数が正しくありません。|
|2 (0x2)|指定されたファイルが見つかりません。|
英語のところは日本語に翻訳する。\\
* [[https://ascii.jp/elem/000/001/432/1432965/|Windowsシステムエラーコード一覧]]
* [[http://www005.upp.so-net.ne.jp/neko-note/index.files/3rd/error/system-code.html|Windowsで表示されるエラーコードの見方]]
* [[https://docs.microsoft.com/ja-jp/windows/desktop/TaskSchd/task-scheduler-error-and-success-constants|Task Scheduler Error and Success Constants]]
* [[https://docs.microsoft.com/ja-jp/windows/win32/debug/system-error-codes|system-error-codes]]
===== トラブル対応 =====
==== タスクが終了しない ====
タスクが実行するバッチ内で、pause コマンドが入ったままになっていた。
==== 0x8004131F ====
0x8004131F:An instance of this task is already running.\\
0x8004131F:このタスクのインスタンスは既に実行中です。
対処方法として、タスクマネージャーで実行中のcmdを終了させる。\\
どれかはコマンドライン引数で判断する。\\
{{:運用:opened-cursor.png|}}
==== 0x800710E0 ====
サーバー起動時に発生、再起動では発生していない。\\
0x800710E0:オペレーターまたは管理者が要求を拒否しました。
対処方法として、タスクスケジューラーの条件タブの「コンピューターをAC電源で使用している場合のみタスクを開始する」をオフに設定する。
{{:運用:タスク電源.png|}}
==== 0x80070002 ====
0x80070002:指定されたファイルが見つかりません。
対処方法として、指定のファイルが見つからないので設定を見直す。
==== 0x41303 ====
0x41303:タスクは実行されていません。
対処方法として、タスクを実行する。もしくはタスクスケジューラーの開始日を未来の日付にする。
==== 操作を2つ以上設定したタスクの実行が失敗 ====
操作タブにbat実行等2つ以上設定している場合にサーバ起動後の初回とそれ以降の自動実行がエラーになる場合がある。
=== 現象 ===
タスク スケジューラにて、タスクに “操作” を複数 (2 つ以上) 登録した場合、タスクのスケジュール時刻がスキップされたタイミング以降に、タスクがスケジュール実行されなくなる問題があります。
[[https://social.technet.microsoft.com/Forums/office/ja-JP/c0c45d01-5ccc-441b-ae20-8e1d5876df29/258052031612434-2?forum=Wcsupportja|操作を 2 つ以上設定したタスクの実行が失敗する問題について]]
=== 対応 ===
[設定] タブにて「タスクスケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」にチェックを入れる。
=== 対処策 ===
操作を1つにしていただくことで回避が可能