PowerShellでシステムを特定の時刻にシャットダウンする方法で守る合格線は「予定時刻、対象端末、稼働中セッションを先に確認し、タスク登録はWhatIfで内容を固定する」です。時刻指定シャットダウンの対象identityを途中で入れ替えず、stdout・stderr・終了状態を別々に保存します。
時刻指定シャットダウンの対象境界は「管理対象のWindows端末。クラスターノードやサーバーは保守手順とフェイルオーバー確認を優先する」です。時刻指定シャットダウンで範囲外の候補、実在しないpath、想定外の実行identityが一つでもあれば開始せず、Get-Dateの取得段階へ戻ります。
時刻指定シャットダウン|予定時刻、対象端末、稼働中セッションを先に確認し、タスク登録はWh…|accept
時刻指定シャットダウンではGet-Dateのbaseline、Get-ScheduledTaskの再取得、Unregister-ScheduledTaskの復旧材料を同じ対象へ結べた時だけ完了です。時刻指定シャットダウンの表示上の成功と利用側の結果が違う場合は後者を優先し、承認記録を閉じません。
| 確認対象 | PowerShellによる時刻指定シャットダウン |
| 適用範囲 | 管理対象のWindows端末。クラスターノードやサーバーは保守手順とフェイルオーバー確認を優先する |
| 成功条件 | 予定時刻、対象端末、稼働中セッションを先に確認し、タスク登録はWhatIfで内容を固定する |
| 中止条件 | shutdown.exeの/fは未保存データを失わせ得るため例では使わない |
| 復旧基準 | 保存した変更前状態へ戻し、同じ検証を再実行できること |
時刻指定シャットダウンの対象boundary|管理対象のWindows端末。クラスターノードやサーバーは保守手順と…
時刻指定シャットダウンを開始する前の停止条件は「shutdown.exeの/fは未保存データを失わせ得るため例では使わない」です。時刻指定シャットダウンの対象数、権限、同時更新の有無を読み合わせ、この兆候を除外できない場合は変更commandを実行しません。
- 対象boundary:管理対象のWindows端末。クラスターノードやサーバーは保守手順とフェイルオーバー確認を優先する
- 変更前証拠:Get-Dateのstdout・stderr・終了状態と取得時刻
- 承認前の禁止条件:shutdown.exeの/fは未保存データを失わせ得るため例では使わない
- 復旧input:Unregister-ScheduledTaskが参照する保存物を実在確認する
時刻指定シャットダウン × Get-Date|対象identityを照合する
時刻指定シャットダウンではGet-Dateを変更前に実行し、対象名、内部識別子、件数、主要属性を作業記録へ保存します。時刻指定シャットダウンの空stdoutを正常値へ変換せず、権限不足と対象なしを別statusにします。
$now = Get-Date
$runAt = $now.Date.AddHours(23)
if ($runAt -le $now) { $runAt = $runAt.AddDays(1) }
if ($runAt -le $now) { throw "shutdown予定時刻が未来ではありません: $runAt" }
$runAt
Get-CimInstance Win32_OperatingSystem | Select-Object CSName,LastBootUpTime,LocalDateTime
query user
時刻指定シャットダウンのこの出力は、後続のNew-ScheduledTaskActionへ渡す入力の存在確認です。時刻指定シャットダウンの取得中に対象が変わったrunは破棄し、同じidentityについてbaselineを採り直します。
| NextRunTime | PowerShellによる時刻指定シャットダウンでは意図した日付とローカル時刻か。日付を跨ぐ計算を曖昧にしない |
| LastTaskResult | PowerShellによる時刻指定シャットダウンでは0以外ならタスク履歴とイベントログで終了理由を確認する |
| query user | PowerShellによる時刻指定シャットダウンでは対話セッションの有無を示す。未保存作業の同意を取る判断材料にする |
時刻指定シャットダウンで比較するfieldは「NextRunTime、LastTaskResult、query user」です。時刻指定シャットダウンを単独の表示名や時刻だけで同一と決めず、対象identityと適用範囲を一行のrecordへ束ねます。
時刻指定シャットダウンの限定操作|New-ScheduledTaskActionと管理対象のWindows端末。クラスターノード…
単発shutdown taskは同名taskが存在しないことを先に確認し、WhatIfの表示、利用者通知、未保存作業、バックアップ完了をレビューしてから専用tokenで一回だけ登録します。WhatIfだけではtaskは作成されません。
$taskName = 'ITtrip-ApprovedShutdown'
if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
throw "同名taskが既に存在します: $taskName"
}
$now = Get-Date
$runAt = $now.Date.AddHours(23)
if ($runAt -le $now) { $runAt = $runAt.AddDays(1) }
if ($runAt -le $now) { throw "shutdown予定時刻が未来ではありません: $runAt" }
$action = New-ScheduledTaskAction -Execute 'shutdown.exe' -Argument '/s /t 60 /c "Approved maintenance"'
$trigger = New-ScheduledTaskTrigger -Once -At $runAt
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Description '承認済み保守停止' -WhatIf
$approval = Read-Host "対象端末・利用者通知・未来の予定時刻 $runAt を確認後、REGISTER-SHUTDOWN-ONCEを入力"
if ($approval -cne 'REGISTER-SHUTDOWN-ONCE') { throw 'task登録は承認されませんでした' }
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Description '承認済み保守停止' -Confirm:$true -ErrorAction Stop
$info = Get-ScheduledTaskInfo -TaskName $taskName -ErrorAction Stop
if ($info.NextRunTime -le (Get-Date) -or $info.NextRunTime -ne $runAt) {
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue
throw "登録後のNextRunTimeが承認時刻と一致する未来値ではありません: expected=$runAt actual=$($info.NextRunTime)"
}
$info | Select-Object NextRunTime,LastRunTime,LastTaskResult
時刻指定シャットダウンへNew-ScheduledTaskActionを実行した直後は別対象へ連続適用せず、処理件数とwarningを保存します。時刻指定シャットダウンで部分成功があれば成功分と未処理分を分け、Get-ScheduledTaskの確認を先に行います。
時刻指定シャットダウンのacceptance|Get-ScheduledTaskと予定時刻、対象端末、稼働中セッションを先に確認し、タス…
時刻指定シャットダウンではGet-ScheduledTaskを使い、変更commandの変数ではなく保存後の現状を独立して読み直します。時刻指定シャットダウンの主要値、件数、利用側の代表操作がすべて一致した場合だけacceptします。
Get-ScheduledTask -TaskName 'ITtrip-ApprovedShutdown' | Select-Object TaskName,State
Get-ScheduledTaskInfo -TaskName 'ITtrip-ApprovedShutdown' | Select-Object LastRunTime,LastTaskResult,NextRunTime
- 主要判定:予定時刻、対象端末、稼働中セッションを先に確認し、タスク登録はWhatIfで内容を固定する
- error判定:stderrまたはaccess deniedを空結果へ丸めない
- 利用側確認:スリープ中に実行するか、電源復帰させるかはタスク条件に依存するという条件を除外する
- recovery確認:Unregister-ScheduledTaskの入力と対象identityがbaselineに一致する
時刻指定シャットダウンのstop条件|shutdown.exeの/fは未保存データを失わせ得るため例では使わない
時刻指定シャットダウン|停止:shutdown.exeの/fは未保存データを失わせ得るため例では使わない
時刻指定シャットダウンで停止する兆候は「shutdown.exeの/fは未保存データを失わせ得るため例では使わない」です。時刻指定シャットダウンを再実行回数で解決せず、対象選択と前提条件を修正して新しいbaselineから再開します。
時刻指定シャットダウン|保留:タスクをSYSTEMで登録すると利用者の可視性が下がるため変更管理番号と説明を必ず残す
時刻指定シャットダウンで「タスクをSYSTEMで登録すると利用者の可視性が下がるため変更管理番号と説明を必ず残す」を検出した結果は保留にします。時刻指定シャットダウンの現在状態と残存物を保存し、影響範囲を特定してから復旧か再試行かを選びます。
時刻指定シャットダウン|再設計:スリープ中に実行するか、電源復帰させるかはタスク条件に依存する
時刻指定シャットダウンの設計を戻す条件は「スリープ中に実行するか、電源復帰させるかはタスク条件に依存する」です。時刻指定シャットダウンとは別層の権限・format・運用要件が原因なら、optionを足さず担当workflowへ引き渡します。
時刻指定シャットダウンのrecovery|Unregister-ScheduledTaskで保存状態へ戻す|時刻指定シャットダウン
時刻指定シャットダウンではUnregister-ScheduledTaskが参照するbackup、旧値、または候補fileを変更前に作り、hash・権限・対象identityを確認します。時刻指定シャットダウンの復旧開始時にも現在状態を追加保存し、上書き対象を一件へ絞ります。
$taskName = 'ITtrip-ApprovedShutdown'
Get-ScheduledTask -TaskName $taskName -ErrorAction Stop | Select-Object TaskName,State
Unregister-ScheduledTask -TaskName $taskName -WhatIf
$approval = Read-Host '未実行taskの取消対象を確認後、CANCEL-SHUTDOWN-TASKを入力'
if ($approval -cne 'CANCEL-SHUTDOWN-TASK') { throw 'task取消は承認されませんでした' }
Unregister-ScheduledTask -TaskName $taskName -Confirm:$true -ErrorAction Stop
if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) { throw 'taskが残っています' }
時刻指定シャットダウンでUnregister-ScheduledTaskを終えた後は、baselineとの一致だけでなく利用側の代表操作も再試験します。時刻指定シャットダウンの復旧中に新しいerrorが出たらcommandを止め、残った状態を保全してownerへ渡します。
時刻指定シャットダウンの運用case|夜間保守で23時に一台だけ停止する際、利用者通知、バックアップ完了、監視抑止を確認し、…
時刻指定シャットダウンの運用例は「夜間保守で23時に一台だけ停止する際、利用者通知、バックアップ完了、監視抑止を確認し、タスクのNextRunTimeを別担当がレビューする運用」です。時刻指定シャットダウンの対象固定、承認番号、変更前後の比較、復旧可能性を一つのrun recordへまとめます。
時刻指定シャットダウンをautomationへ載せる場合は、重複実行を防ぐlock、開始終了時刻、処理件数、Get-ScheduledTaskの判定を保存します。時刻指定シャットダウンのlogから秘密値を除外し、失敗runを前回値で上書きしません。
時刻指定シャットダウン|PowerShellを閉じても予定は残りますか
結論:登録済みタスクは残るが、単なるStart-Sleep処理はセッション終了で消える
時刻指定シャットダウン|毎日停止に変更してよいですか
選択基準:繰り返しは影響が大きい。まず一回限りで検証し、休日や例外日を含む運用設計を別途行う
時刻指定シャットダウン|すぐ中止するにはどうしますか
運用上の答え:未実行ならタスク登録を解除する。shutdownが開始済みならshutdown /aの適用時間内か確認する
時刻指定シャットダウンの採用条件は、上記の独立確認が通り、停止条件が一件も残らず、Unregister-ScheduledTaskの復旧材料が読めることです。時刻指定シャットダウンで対象identityが途中変化したrunは破棄し、保存済みbaselineから再収集します。
登録済みtaskだけを完了扱いにする
実行時刻が当日23時以降なら翌日23時へ一度だけ繰り上げ、登録前にも未来時刻であることを検査します。Register-ScheduledTaskの実行後はGet-ScheduledTaskInfoでNextRunTimeを再取得し、現在より未来かつ承認した予定と一致して初めて予約完了です。
未実行なら承認付きUnregister-ScheduledTaskで取消します。shutdown.exeが開始済みの場合は別途shutdown /aの猶予内かを確認し、task削除だけで停止命令を取り消したと判断しません。
公式情報・参考資料
時刻指定シャットダウンの構文と制約は、本文末の一次資料と対象環境のlocal helpで照合します。時刻指定シャットダウンの記事確認日は2026年7月17日で、版が異なる場合はoption、default、終了statusの差を先に確認してください。

コメント