Windows 10でシャットダウンスクリプトの強制終了を回避する方法

Windows 10でシャットダウンスクリプトの強制終了を回避する方法

Windowsマシンの設定/制御を効率よく行うための機能「グループポリシー」では、Windowsをシャットダウンするときに指定したスクリプトを実行させることができる「シャットダウンスクリプト」を設定できますが、シャットダウンスクリプトの継続時間には制限があります。

Windows 10ではデフォルトで600秒(10分)の制限があり、シャットダウンスクリプトの処理が制限時間を超えると、スクリプトが強制終了されWindowsがシャットダウンしてしまいます。

そこでここでは、Windows 10でシャットダウンスクリプトの実行時間を延長する方法を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit21H1

シャットダウンスクリプトの実行時間を延長する

Windows 10では、グループポリシー設定である程度シャットダウンスクリプトの実行時間を延長することができます。

手順は、次のとおりです。

グループポリシーエディターを開き「コンピューターの構成」>「管理用テンプレート」>「システム」>「スクリプト」にある「グループ ポリシー スクリプトの最大待機時間を指定する」の設定を有効化して、シャットダウンスクリプトの実行をシステムが待機する時間を指定して「OK」をクリックします。

ここでは例として時間に「0(秒)」と指定しています。「0(秒)」にすると、スクリプトの終了まで待機し続けます。

Windows 10でシャットダウンスクリプトの強制終了を回避する方法

次に、ポリシーを適用するため、管理者権限でコマンドプロンプトを起動して、以下のコマンドを実行します。

> gpupdate /force

以上で、ポリシー設定完了ですが、注意点があります。

ポリシーの説明文を読むと、上の設定だけでシステムの待機時間が延長されて、スクリプトを実行できそうですが、グループポリシーを設定しても、1400秒(22分)ほどで強制終了されシャットダウンしてしまいます。

追加のレジストリ設定

シャットダウンスクリプトの処理に1400秒以上かかることが予想される場合は、さらに以下の設定を行います。

まず、システム権限でレジストリを操作する必要があるため、Windows Sysinternalsの「psexec」ツールをダウンロードして展開しておきます。

次に、管理者権限でコマンドプロンプトを起動して、psexecツールの場所をカレントディレクトリとして、以下のコマンドを実行します。

> psexec -accepteula -s -i regedit.exe

すると、システム権限でレジストリエディターが起動するので「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\gpsvc」にある「PreshutdownTimeout」の値をミリ秒単位で指定します。

ここでは例として1時間「3600000(10進数)」に変更しています。

Windows 10でシャットダウンスクリプトの強制終了を回避する方法

Memo

指定可能な最大値は「4294967295」のようです。

以上で、設定完了です。

設定は即時で適用されるため、次回シャットダウンするときから、指定した時間までシャットダウンスクリプトの実行をシステムが待機してくれるようになります。

あとがき

なお、上の設定はユーザーのポリシーとして設定できる「ログオフスクリプト」でも有効です。