WSUS環境下でのWindowsUpdateエラー,0x80244022の対処法
WSUSサーバを立てているのに、WindowsUpdateでエラーが起こっている場合の対処法についてのメモ
目次
WindowsUpdateエラー
サーバ資産の棚卸をしていて、WindowsUpdateで「重要」と表示されるのに、適用されないUpdateがあることに気づきました。
詳細を確認してみると、適用できてないUpdateは主に3つ:
.netFrameworkの更新
セキュリティのみの品質更新プログラム
IE11の累積的なセキュリティ更新プログラム
別記事で書いたように、PowershellのScriptを使って自動化しているのですが、どうやら上手く動いてないようです。手作業でやっている方は下記を参考にしてみてください。便利なスクリプトが提供されています。
Microsoftサーバに対してUpdateしようとして-AcceptAllにすると言語Packとか要らない更新プログラムがインストールされかけたので、-AutoSelectOnlyにしていたのですが、これだと「セキュリティ更新プログラム」までRejectされるようです。
セキュリティ更新がなぜRejectされるかは不明ですが、
調べてみると、更新プログラムは以下の三種があるそうです。
・重要な更新プログラム
・推奨する更新プログラム
・オプションの更新プログラム
-AutoSelectOnlyでは重要な更新プログラムしか受け入れません。Windowsの画面では推奨する更新プログラムまで「重要」と表示されるようです。
わかりにくいよ!
アクセス先を社内のWSUSサーバにして、オプションを-AcceptAllにして動かすと、セキュリティ更新プログラムも対象になりました。
…が、エラーで終了するようです。
Errorを拾ってくれないのがこのScriptの残念なところ。しょうがないので自分でエラーを確認します。
発生したエラーは$Error配列に格納されているので、その最初のもの[0]を取り出してやります。
1 2 |
PS C:\Windows\system32> $Error[0]
"1" 個の引数を指定して "Search" を呼び出し中に例外が発生しました: "HRESULT からの例外:0x80244022"
発生場所 C:\windows\system32\windowspowershell\v1.0\Modules\PSWindowsUpdate\Get-WUInstall.ps1:508 文字:4
+ |
0x80244022という良くあるエラーが返っています。
基本的にはこのエラーは「サーバが利用できない」という内容です。WSUSのエラーコードを調べるとService Unavailという内容でした。
0x80244022 HTTP_STATUS_SERVICE_UNAVAIL Http status 503 – temporarily overloaded.
WSUS Server Error Codes
このエラー番号をGoogle検索すると、「Proxy環境下で発生する場合、実行環境にProxyを設定する必要がある」というFAQが見つかります。
proxyを通じてWindowsUpdateサーバーに接続している場合のFAQのようです。
プロキシ サーバーを使用する環境にて Windows Update を実行すると通信エラーが発生する
https://support.microsoft.com/ja-jp/help/2894304
https://blogs.technet.microsoft.com/jpwsus/2014/04/09/windows-update-12392/
自分の場合は、Proxyを通してMicrosoftのサーバにアクセスしているわけではないので、非該当です。
WindowsUpdateログの確認
しょうがないので、もう少し情報を探していると、WindowsUpdateのログを見ましょう、という情報がhitしました。
このログは%windir%\Windowsupdate.logに格納されていいます。見方は下記のMicrosoftのサイトを参考にしてください。
参考)Windowsupdate.logファイルの解釈
Windows+Rキーを押して「Windowsupdate.log」を入力してEnterを押すと、メモ帳で開きます。
ざーっとみていくとWarningが発生している個所をみつけました。
1 2 3 4 |
2018-10-1x 16:36:20:451 984 a48 WS WARNING: 'http://wsus99.xxxxxx.com/ClientWebService/client.asmx' のエンドポイントとの通信でエラーが発生しました。
2018-10-1x 16:36:20:451 984 a48 WS WARNING: サーバーが HTTP 状態コード '503 (0x1F7)' およびテキスト 'Service Unavailable' を返しました。
2018-10-1x 16:36:20:451 984 a48 WS WARNING: サービスが一時的に過負荷状態になっています。
2018-10-1x 16:36:20:451 984 a48 WS WARNING: MapToSusHResult mapped Nws error 0x803d0012 to 0x80244022
2018-10-1x 16:36:20:451 984 a48 WS WARNING: Web service call failed with hr = 80244022.
|
…単に過負荷でWSUSサーバが応答を返せない様です。書かれているURIにInternetExplorerでアクセスすると、エラーが返ってきました。
社内検索すると、Update配信直後はサーバが混雑するので間をあけて繰り返し試してみてください、というQ&Aが見つかりました。
セキュリティホールあったらそんなのどかな事じゃすまないと思うんだが(-_-;
結局、-AcceptAllにオプションを変えて自動実行を仕掛けてみることにしました。
一定間隔でUpdateを自動実行する
間をあけて、ということなので、1分間隔で接続を試みるScriptを組んでみました。
1 2 3 4 5 |
do{
$Error.clear()
$Status=Get-WUInstall -AcceptAll -AutoReboot
Start-Sleep -s 60
}While($Error[0] -match "0x80244022")
|
$Status変数は、何も更新がなければ空のまま、更新が有れば更新結果の文字列が入ります(上の実行結果のような文字列)。
ログを出すよう改良して別記事にアップしたので参考にしてください。
Windows10の場合
Windows10/Server2016以降の場合、WndowsUpdateはテキストではなくバイナリのログに保存されるようです。同じ様にWindowsUpdate.logを表示しようとしたら、下記のようなつれないログが表示されました。
1 |
Windows Update logs are now generated using ETW (Event Tracing for Windows).
Please run the Get-WindowsUpdateLog PowerShell command to convert ETW traces into a readable WindowsUpdate.log
|
言われたとおりにGet-WindowsUpdateLogをPowerShellで実行したところ、デスクトップにテキスト文のログが生成されました。内容はWindows8.1/Server2012以前と変わらないようです。
ただ、2バイトコードは文字化けしてしまうようです。対処法を別記事にまとめてありますのでご参照ください。Powershellのスクリプト付きなのでコピペ&実行で対処できるはず。
まとめ
- WSUS環境下でErrorが起こったら、WindowsUpdateログを参照してみる。
- エラー番号の内容を確認する
- 設定されているWSUSサーバにきちんと接続できるか調査する
- 正しく設定されていて接続できないようなら、繰り返しトライするScriptを組む
参考にしてみてください。
“WSUS環境下でのWindowsUpdateエラー,0x80244022の対処法” に対して3件のコメントがあります。