Run Command で Windows Update ができなくなった話
かもしれない運用は大事です、那須です。
皆さんちゃんと Windows Update を定期的にやっていますか? どんな方法で悪意ある何かがやってくるかわかりませんよ? 普段から何かあるかもしれない、と思って対策するのはとても大切なのでやっておきましょう。 ただ、今年に入ってから Windows Update にはほんとに振り回されっぱなしです… 今回はそのお話を書き残しておこうと思います。
いつものように Windows Update しようとした
Systems Manager を使って Windows Update を毎月実施している環境があるんですが、今月も同じようにスケジュールしていました。 で、実施翌日にログ確認したらこんなエラーが出ていました。
Install-WindowsUpdates : オブジェクト参照がオブジェクト インスタンスに設定されていません。 発生場所 行:1 文字:1 + Install-WindowsUpdates -UpdateLevel Important + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (PatchNow.Implem...UpdateOperation:InstallWindowsUpdateOperation) [Install-WindowsUpdates], NullReferenceException + FullyQualifiedErrorId : Exception Level 1: Error Message: オブジェクト参照がオブジェクト インスタンスに設定されていません。 Stack Trace: 場所 PatchNow.Implementations.InstallWindowsUpdateOperation.DoWindowsUpdateOperation() 場所 PatchNow.Implementations.WindowsUpdateOperation.DoBeginProcessing() ,PatchNow.Cmdlets.InstallWindowsUpdates failed to run commands: exit status 4294967295
???
今までこんなエラーは当然出てないですし、構成も何も変わってないのでおかしいなと思ったんですよね。 しかも Windows Update の Run Command 実行直後にエラーになっているので、これは Systems Manager かそれをトリガーしているスケジューラで何か変更があったのかな?と最初は思いました。
スケジューラ側は何も変わってなかった
スケジューラの問い合わせ窓口に問い合わせたんですが、特に何も変更されていないと回答がありました。 他の環境はうまく実行できていたので、まあそうだろうなと思いつつ、次に進みます。
AWS に問い合わせた
当然、AWS が管理する Run Command ドキュメントは何も変わってなかったんですが、問い合わせた回答の中にこんな返答がありました。
%PROGRAMDATA%\Amazon\PatchNow\State\ の中に空のState(json)ファイルがある場合にこのようなエラーがでて失敗する事例がありますよ。 もしあったら削除して Run Command を再実行してみてください。
当該フォルダを確認してみると、
確かに 0 バイトの json ファイルがあったので、これを削除して再実行するとうまく Windows Update できました。 本当にサポートの存在ってありがたいですよね!
そういえば先月こんなことがあった
空の json ファイルの更新日時を見ると、前回の Windows Update を実施した時間帯でした。 さらに思い返してみると、前回の Windows Update は 8 時間経っても終わらずにエラーで Run Command が終了していたんですよね。 手で Windows Update 実行しても、95% のまま動かずタイムアウトになる有様… 4 回リトライしてようやく適用された、なんてことがあったんです。
なので、
- Run Command から Windows Update を実行してタイムアウト等で処理が完了しなかったら空の State(json) ファイルが残る
- 空の json ファイルがあると Run Command は処理を実行できない
という知見を得たので、他にも空の json ファイルが残るパターンがあることを想定してこのフォルダに Run Command 実行時以外に json ファイルがあれば通知するよう仕込みました。 これで Windows Update 当日にエラーになる可能性をまた一つつぶしました。
まとめ
サポートは正しく活用しましょう。解決までのスピードが全然違います。
同じエラーを発生させない仕組みをどんどん準備しましょう。
Linux でも同じものが作れるなら Linux に変えましょう。Windows Update はいろいろとツライです…