3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

Windows10でWindowsUpdate後の再起動およびスリープ勝手に復帰現象を抑制したい

悪名高きWindows10のWindowsUpdate。
MS側のある程度は意識してアクティブ時間の設定とかを用意したりいろいろしてますが、自宅用PCの使い方にはマッチしません。

今回は更新適用後の勝手に再起動の抑制と、スリープからの勝手に復帰状態を抑制するために行った方法をメモします。

環境は Windows 10 Pro 1803(April 2018 Update)、非WSUS,非AD環境です。

勝手に再起動抑止

パッチ適用後勝手に再起動される件については、1709(Fall Creators Update)時代に適用した再起動抑制のグループポリシーが1803でも効果がありました。 非AD環境なので、ローカルグループポリシーで以下の設定をしてました。

コンピューターの構成 - 管理用テンプレート - Windowsコンポーネント - Windows Update - スケジュールされた自動更新のインストールで、ログオンしているユーザーがいる場合には自動的に再起動しない:有効

勝手にスリープ解除抑止

当初以下のローカルグループポリシーを試したのですが、対象がWin2008,Win7,WinVistaだけで8以降は使用できないようです。

コンピューターの構成 - 管理用テンプレート - Windowsコンポーネント - Windows Update - WindowsUpdateの電源管理を有効にして、システムのスリープ状態が自動的に解除され、スケジュールされた更新がインストールされるようにする : 無効

で、調べてみるとタスクスケジューラの以下のタスクが原因であることがわかりました。

タスクスケジューラライブラリ\Microsoft\Windows\UpdateOrchestrator\Reboot

このタスクを無効にするか、プロパティ内の[タスクを実行にするためにスリープを解除する]のチェックを外します。

が、このタスク、SYSTEMアカウントで作成されています。
管理者権限ユーザーだとしても、変更できません。(一応SYSTEMアカウントでの認証ダイアログを聞いてきますが認証突破はできません。)

SYSTEMアカウントで作成されたタスクを変更するにはPsExecを使うといいようです。

具体的には以下のようにします。
管理者権限でコマンドプロンプトを起動します。

>PsExec.exe -s  -i cmd

(-sはSYSTEMアカウントでプロセス起動、-iはセッションのデスクトップと対話する)

SYSTEMアカウントでコマンドプロンプトが起動するので、タスクスケジューラを起動します。

>taskschd.msc

あとは、上記の Reboot タスクを無効にするなり、スリープ解除にチェックの外すなりします。

参考:
タスクスケジューラのRebootを削除・無効する方法
PsExec を使うと SYSTEM ユーザ権限でプログラムを実行できる