私はWindows 10 Proで毎日のタスクを実行していますが、
- コンピュータを休止状態から復帰させる
- cmd.exe を起動し、コマンド スクリプトを実行してファイルをネットワーク ドライブにコピーし、ログ ファイルを作成します。
- コンピュータをシャットダウンする
タスク スケジューラ内からタスクを手動で開始すると、すべてが意図したとおりに実行されます。
コンピュータを休止状態にしておくと、タスク スケジューラは指定された時間にコンピュータを起動しますが、コマンド ファイル (.cmd) はまったく実行されません。ログ ファイルは作成されず、ファイルはコピーされず、コンピュータはシャットダウンされません。タスクは次のようにマークされます。「戻りコード 2147942401 で正常に完了しました」これは 16 進数の 0x80070001 です。このエラー コードは「不正な関数」を示しているようですが、特に前述のように手動で開始するとタスクが正常に実行されるため、それが何であるかはわかりません。
タスク設定の概要は次のとおりです (ドイツ語から翻訳されていますが、わかりやすいはずです)。
全般: ユーザーのログインに関係なく実行、パスワードを保存しない、最高の権限、Windows 10 用に構成
アクション: プログラム cmd.exe を起動します。引数: /c "path-to-cmd-script\script.cmd >> logfile.txt"。開始場所: 空
条件: コンピュータを再起動する
設定: 必要に応じて実行を許可する; 実行が失敗した場合は 10 分ごとに再起動する; 実行が 3 日を超える場合はタスクを終了する; 要求に応じて停止されない場合はアクティブなタスクを強制終了する; 新しいインスタンスを開始しない
バックアップを行う別のタスクがありますその通り正常に動作している同じ設定 (起動し、スクリプトを実行してからコンピューターをシャットダウンします)。
ヒントがあれば大歓迎です。質問も歓迎します。
答え1
実は、そうではありません。ただし、最も単純なタスク スケジューラ設定を使用したところ、動作するようになりました。
一般的な:
- ユーザーがログインしているときのみ使用
- 最高権限を使用する
- Windows 10用に設定する
アクション:
プログラム/スクリプト:C:\Windows\System32\cmd.exe
引数:/c <your batch file with parameters>
条件:
- コンピュータを再起動する
設定:
- 必要に応じて実行を許可する
- 開始できなかった場合はできるだけ早く実行する
- タスクが失敗した場合は、5分ごとに再起動します
- 実行が3日を超える場合はタスクを終了する
- 要求に応じて停止されない場合は強制終了する
- タスクがすでに実行中の場合は現在のインスタンスを停止します
今では何ヶ月も毎日指定された時間に実行されています。
答え2
Powershell はスケジュールされたタスクを扱うのが苦手です。私はこれに多くの時間を費やしました。以下は、試行錯誤を重ねて実証されたバッチ ファイルを使用してトラブルシューティングを行う方法です。
中間バッチ ファイルを作成し、バッチ ファイルで PowerShell を呼び出すようにしてください。バッチ ファイルを使用すると、ログに出力できる一連の echo を実行できます。これにより、プロセスの完全な stdout/stderr を確認できます。これにより、より詳細なトラブルシューティングに役立つ場合があります。
ログは、スケジュールされたタスク引数に追加することで作成できます> "<path_to_log_file>" 2>&1
。
答え3
私の場合、タスクは機能することもあれば、機能しないこともありました。スケジュールされたタスク履歴によると、失敗した場合は、約 40 秒間実行され、何もせずに完了したように見えますaction "C:\windows\SYSTEM32\cmd.exe" with return code 2147942401
。
この場合、グループポリシー設定をいじるのは意味がありませんでした。だろううまくいくが、いつもうまくいくわけではない(https://stackoverflow.com/questions/48343993/batch-file-from-scheduled-task-returns-code-2147942401/)。
タスクを簡素化、再作成、再構成しても問題は解決しませんでした。
また、バッチ ファイルを切り刻んで標準出力のリダイレクトを削除し、ログ機能を放棄する (そして盲目になる) ことも検討しました。または、バッチ ファイルをまったく使用せずに、実際の .exe プロセスを実行するだけです。これが解決策だった可能性があります。
また、「起動時」にスケジュールされたタスクをサービスに置き換えることも検討しましたが、これは、このような些細な問題に対してはかなりコストのかかる実験だったでしょう。
最終的に、スケジュールされたタスクに遅延を追加することを検討し、遅延サービスのようにタスクを構成する方法を検討しました。サービスは、「自動」または「自動 (遅延開始)」のいずれかになります。「起動時」にスケジュールされたタスクの場合、遅延を追加する機能など、独自の個別のプロパティを持つのはトリガーです。
スケジュールされたタスクが数ミリ秒早く開始され、一部の OS サービスまたは機能がまだ利用できないか許可されていないことがあったと思います。トリガーに少し遅延を追加するだけで問題は解決しました。