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

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

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

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

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

実行時間の制限を延長する

シャットダウンスクリプトの実行時間の制限を延長するときは、グループポリシーで設定でき、手順は次のとおりです。

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

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

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

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

> 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でシャットダウンスクリプトの強制終了を回避する方法

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

以上で、設定完了です。

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

あとがき

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