Windows Updateを自動で再起動とアップデートを繰り返すバッチファイルを作る

Windowsパソコンのリカバリやクリーンインストールしたときに数回に渡りWindows Updateと再起動を繰り返しますが、Windows Updateの手間を減らし、夜間にフルオートで実行させて朝にはすべての更新ファイルの適用が終わっているみたいなことができないかな?と方法を探していたらPowerShellを使った方法を見つけたのでメモ。

上記ページからダウンロードしたAutoWindowsUpdate.ps1を使い、以下の方法を試したところ、ほぼうまくいきました。スクリプトでアップデート後に再起動を行うようになっているのですが、うまくいかなかったのでスタートアップと組み合わせてみました。

  1. 自動ログオンを設定
  2. スタートアップにスクリプト起動バッチを登録
  3. AutoWindowsUpdate.ps1を実行

Windows 7/Windows Embedded Standerd 7/Windows 10で試して使えました。PowerShellが使えればWindows 8/8.1、Windows Server 2008 R2やWindows Server 2012でも使えるのではないかと思います。

自動ログオンの設定

自動でWindows Updateを行うスクリプトを走らせても再起動した際、Windowsログオンのパスワード入力を求められると自動化できません。そこで、Administratorなど管理者権限のあるユーザーで自動ログオンできるようにしておきます。(ユーザー権限ではAutoWindowsUpdate.ps1を管理者として実行できないので必ず管理者権限のユーザーでログオンできるようにします。)

Windows+Rを押してcontrol userpasswords2またはnetplwizと入力し、管理者権限のユーザーを自動ログオンするように設定します。設定方法は以下の記事を参考にしてください。

Updateが終わったらパスワードを求めるように逆の作業を行い元に戻します。

スタートアップにスクリプト起動バッチを登録

Windows Updateを実行するPowerShellのスクリプトAutoWindowsUpdate.ps1を起動するためのバッチファイルをスタートアップに登録します。Updateが終わったらスタートアップから削除します。

ソース例 start.bat

例えば、AutoWindowsUpdate.ps1をC:\WindowsUpdate\AutoWindowsUpdate.ps1に保存した場合。

powershell Set-ExecutionPolicy RemoteSigned
powershell "C:\WindowsUpdate\AutoWindowsUpdate.ps1 Full"
powershell Set-ExecutionPolicy Restricted
pause

これをstart.batとかにしてスタートアップに登録します。

通常PowerShellのスクリプトファイル(拡張子「.ps1」)を実行するには、ExecutionPolicyRestrictedになっているとエラーになります。そのため1行目のSet-ExecutionPolicy RemoteSignedで変更し、スクリプト終了後はSet-ExecutionPolicy Restrictedで元に戻します。

重要な更新ファイルのみのアップデートにしたいときはファイルパスの後ろのFullの文字を削除してください。

現在のExecutionPolicyの状態を調べるコマンド

Get-ExecutionPolicy
Set-ExecutionPolicyのコマンドについての参考

AutoWindowsUpdate.ps1を実行

AutoWindowsUpdate.ps1を実行すれば更新ファイルの確認→ダウンロード&インストール→再起動をしてくれます。これをスタートアップに登録したバッチファイルから実行します。

参考のソース

以下をメモ帳でAutoWindowsUpdate.ps1という名前を付けてC:\WindowsUpdateに保存します。

アップデート開始の様子

更新ファイルのダウンロードとインストール中の様子

すべてのアップデートが終了したときのログ

すべての更新ファイルがインストールされたら再起動せずにコマンドプロンプトの画面が消え、ログには=-=-=-=-=- Windows Update finished -=-=-=-=-=と表示されています。

ログはC:\WU_Logにあります。

しかし、=-=-=-=-=- Windows Update finished -=-=-=-=-=とされてもインストール失敗し、まだ更新できるファイルが残っている場合があります。その際は手動でstart.batを管理者として実行し、スクリプトを再開してください。こういったことがあるので、全自動というよりは半自動ですね。スクリプトの改善の余地がありそうです。

古いWindows Update Clientが入っていないとWindows Updateの時間がかかるので、あらかじめ新しいWindows Updateクライアントを入れておくことおすすめします。

AutoWindowsUpdate.ps1を単体で実行したい場合

AutoWindowsUpdate.ps1を右クリックして「PowerShellを実行」から実行してもユーザー権限による実行となるためか、スクリプトが開始されませんので、PowerShellからAutoWindowsUpdate.ps1を実行する場合は、PowerShellを管理者で実行してから、AutoWindowsUpdate.ps1のパス入力して実行します。

予備のソースファイル

参考にしたサイトが見れなくなったら困るので、今回の使用したAutoWindowsUpdate.ps1とstrat.batは以下よりダウンロードできるようにしておきます。

その他参考