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

目次

Windows Updateと再起動の繰り返しを自動化したい

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

PowerShellからWindows Updateを行うスクリプト

以下のページからダウンロードしたAutoWindowsUpdate.ps1を使い、Windows7の環境で試したところ、スクリプトからアップデートできました。

AutoWindowsUpdate.ps1C:\WindowsUpdateに保存して使用します。

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

アップデートのフルオート化

このスクリプト単体(AutoWindowsUpdate.ps1)で自動ログオンやWindows Updateと再起動を繰り返し行うようにできるらしいでのですが、試したところうまくいきませんでした。よって、完全なフルオート化するために以下の事を行います。

  1. 管理者ユーザーの自動ログオンを設定
  2. スタートアップにスクリプトを起動するバッチファイルを登録
  3. バッチファイルからAutoWindowsUpdate.ps1を実行

管理者ユーザーの自動ログオンを設定する方法

スクリプトからWindows Updateを行って再起動がかかった際、Windowsログオンのパスワード入力を求められる環境の場合、そこで自動化が止まってしまいます。そこで、予めパスワードを求められないように自動ログオンできるようにしておきます。ユーザー権限でAutoWindowsUpdate.ps1を実行するとエラーになるので、自動ログオンするユーザーは管理者権限のあるユーザーを使用します。

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

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

スクリプト起動させるためのバッチファイルをスタートアップに登録

Windows Updateを実行するPowerShellのスクリプトAutoWindowsUpdate.ps1を起動するためのバッチファイルをスタートアップに登録します。Windows Updateと再起動を無限ループで行う方法なので、全てのアップデートが終わり、自動アップデートが不要になったらスタートアップから削除してください。

起動用バッチファイルのソース例(start.bat)

C:\WindowsUpdateに保存されたAutoWindowsUpdate.ps1を起動するためのバッチファイルをスタートアップに登録します。以下のソースをメモ帳に貼り付け、これをstart.batとか名前を付けて保存し、スタートアップに登録します。

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

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

ExecutionPolicyについて

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

現在のExecutionPolicyの状態を調べるコマンド
Get-ExecutionPolicy
Set-ExecutionPolicyのコマンドについての参考

AutoWindowsUpdate.ps1を実行

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

参考のソース(AutoWindowsUpdate.ps1)

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

アップデート開始の様子

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

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

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

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

Windows7の場合、古いWindows Update Clientが入っているとWindows Updateの時間がかかるので、あらかじめ新しいWindows Updateクライアントを入れておくことおすすめします。最新のWindowsクライアントは毎月配信されるロールアッププログラムに含まれています。

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

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

予備のソースファイル

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

WindowsUpdate.zip

その他参考

前へ

MovableTypeのregex_replaceでシングルクォーテーションの置換えをするとエラーが出るとき

次へ

Citrix RecieverからHTTPでXenAppやXenDesktopに接続できないとき(Windows版)