PowerShellによるWindowsUpdateの自動化

通常、WindowsUpdateの設定で自動更新は可能です。それが使えない時のためのPowerShellを使った自動化の仕方の備忘録です。

シンクライアント環境で特定のアプリをサーバにいれて、クラウド利用してもらっています。
ユーザーから、「WindowsUpdateのポップアップがでるが、どうすればいいのか」と言われました。

ユーザー権限なので実施しても多分コケます。…とは回答できないので(^^;
「管理者で実施しますので作業不要です」と回答しました。

社内環境なので、帯域を節約するためWSUSサーバーを立てています。
それはいいのですが、インストールの自動化オプションを抑止しているため、ユーザー側でインストールを実行しないといけません。ここを自動化してやるのが今回の目的。

スクリプトの実行準備

TechnetにPowerShellスクリプトがあったので、それを自動実行できるようにカスタマイズしていきます。

Windows Update PowerShell Module

こちらからPSWindowsUpdate.zipを落としてきます。どこに置くか環境を確認してみます。

ユーサフォルダについては、パスは通ってますが存在しないらしいので(^^;作った上で移動します。

この際展開した「PSWindowsUpdate」フォルダごと移動してください。

インターネットから落としたファイルは「実行がブロックされる」ことがあるので、インターネットから落としました、というZoneIDを削除する必要があります。

Microsoftがsysinternalsで配っているstreamsを使ってZoneIDを削除します。

Windows Sysinternals streams

ここまできてようやくImportです。

自動実行をするためのオプション設定

次は自動実行するためのオプションを探しましょう。
使うスクリプトはGet-WUInstallだけでよさそうです。

Helpをみるとものすごいたくさんのオプションがあります。

特にオプションの説明がないので、動かしてやって適当なオプションを探しましょう(^_^;
(ソース読めって話もありますけどw)

まずはオプション無しで動かします。

オプションなしだと、確認ダイアログが出てしまうようです。

下記だと確認ダイアログなしでちゃんと動いてくれました。

と思ったら、再起動するかどうかを聞いて来るようです。
いったん中断します。

ユーザがログインしてないことをquery sessionで確認し、Get-WURebootStatusを使用します。

-AutoReboot か -IgnoreRebootするかどちらかです。
Rebootはユーザに告知が必要な気がするので、今回は-IgnoreRebootで実施します。

っていうか、進まない。

コントロールパネルからWindowsUpdateをみると、エラーが出ているようです。

エラー番号「80246007」で検索すると、バックグラウンド インテリジェント転送サービス(BITS)を再起動する、という情報が出てきます。
モジュールの容量が大きいので途中でダウンロードがコケてごみが残っているのでしょう。

ソースを見るとGet-WUInstallは、「0x80240044」以外のエラーコードを拾わない作りになっています。
このエラーは「管理者権限がないとタスクが実行できないセキュリティポリシーになってるよ」ってことみたいです。。

つまり権限問題以外は何度もリトライしてみてください、というコンセプトみたいです。

「本サーバは、毎晩再起動がかかります」という運用ポリシーに変えないとだめかもしれません。

とりあえず、下記をタスクスケジューラに入れて様子を見ることにします。

自動WindowsUpdateするためのタスクスケジューラ設定項目 
設定項目名 内容
プログラム/スクリプト %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加 -Command “C:\Users\[User]\Documents\WindowsPowerShell\Modules¥Get-WUInstall.ps1 -AcceptAll -AutoReboot”
開始 なし

まとめ

  • Windows Update PowerShell Moduleで自動化できる。
  • Updateがコケることがあるので、何度も自動リトライするように設定する。
  • 自動受入、自動再起動のオプションをつけて、タスクスケジューラに登録する。
  • ダウンロードがコケた場合に備えて、定期Rebootを設定する。

Windowsサーバですから、定期リブートはしなきゃいけないですよねぇ…。

PowerShellによるWindowsUpdateの自動化” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください