マイクロソフトは真面目なことに毎月のようにセキュリティパッチを送信してくる。フリーソフト開発秘話、目次へ
よくそんなバグの多いものに値段付けて売っているな、と感じるか、売り上げにつながらないのに誠実な態度だ、と見るべきか、よくわからないが誰もに共通する感情は
「めんどくさい」
であろう。会社組織になると、各自がアップデートを確認に行くのはマイクロソフトのサーバーの負荷も大きいだろうからと気を遣ってか、代表して情報システム部門が取得に行き(パッチを当ててもきちんと社内システムが動作するかを確認し)各端末に配布するのが、まー当然といえば当然であろう。これによって社員の「めんどくさい」がずいぶんと減る。
さらに優秀な情報システム部門となると、各自のPCにちゃんとパッチが当たっているかを確認して結果を還元し、実施が漏れていたら教えてくれたりする。というわけでセキュリティは保たれているはずなのであるが、、、。
理由はよくわからないのだが結果が還元される前に、自分たちで適用状況を確認しなさいということになった。なんかあったんだろう、と推測するのは自由である。(守秘義務にも反しない。)
が問題は「パッチが適用されているという確認手段が確立されていない」ということだ。確かに
[コントロール パネル]−[すべてのコントロール パネル項目]−[プログラムと機能]−[インストールされた更新プログラム]から一覧は出るが、Windowsとか.NETフレームワークとか、OFFICEとか(しかもバージョン別に)カテゴリが分かれているので、チェックはものすごく大変になる。
なので、適用されたパッチ一覧を出力するプログラムを作ろうと思い立った。
通常はレジストリを見ればいいはずで、確かにそういうサンプルプログラムもありはするが
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
にエントリがあるものに限ります
という注釈がある。そこでレジストリエディタを開いてエントリ一覧を見たが、数が全然足りない。どないしょう。
レジストリの中身をテキストファイルに書き出して、エントリを片っ端から探そうとしたのだが、なぜか読めない。理由はファイルがUNICODEだから。なのでUNICODEで読み込もうとしたら今度はメモリが足りません。さすがに挫折した。
というわけで方針転換。パッチが適用されたかの一覧は作れるものと仮定して、その一覧にあるものが適用されているか、を確認しようとした。これならシステムへの負担は少なそうな気がする。
しかし、今月どのパッチを当てるべきなのか、確認する手段がない。確かにまとめてくれている人はいる。
ぼくんちのTV別館とか
パソコンりかばり堂本舗とか。
しかし、InternetExplorerのパッチとか.NET Frameworkまでカバーしてくれているかというと。まあいいや、自分で作ろう。作りさえすれば多分サポート技術情報番号で紐つけられるだろう。ようするにKBからはじまる番号だ。あとはシステムから「このKB番号のパッチあたっているか」を探せばいい。もし自分で作った一覧にもれがあったとしても「Microsoftのサポートページから適用パッチの一覧を作って、ちゃんと当たっていることを確認しています」とは言える。所詮は予備調査だ。キッチリチェックするということが優先。完璧はそのあと。
いろいろ探して見つけたのが、初心者備忘録。おまじないをとなえれば適用されたパッチがぞろぞろと出てくるらしい。
なんだ。一覧出せるじゃないか、と内心忸怩たるものがあったが方針は方針だ。使い勝手はこっちのほうがよさそうだし。
出来上がったものをざっくり説明するとA列縦に確認したいパッチのサポート技術情報番号を並べておいてマクロを実行すると、自分のPCの適用パッチを引っ張り出して突合してくれる。適用されていれば○、いなければ×。
ちなみに同じ機器で二回やると該当列を上書きしてくれ、同じブックを別の機器で動かせば、右側にどんどん新しい列を追加していってくれる。
途中、恥ずかしいバグを出したりしたが(配列の末尾に空行が入るのに気がつかなかった)、縦の列、つまり機器ごとの適用状況表示の標題がコンピュータ名では味気ないな、と登録されていれば管理者名。そうでなければMicrosoftExcelに登録されたユーザ名を出力するようにしたりして見やすさを向上させた。(コンピュータ名と管理者名の対応表作成ツールもおまけで付けた。)
これで何とか管理可能となったかな。何人かに試してもらい、よっしゃあ、いける!というところで
あれ、おまじないなんか唱えなくてもコマンドラインで適用されたパッチ一覧ってとれるのね。Qwerty.work旅に出よう。
が、あれ?ここに出るパッチの番号と、マイクロソフトのサポートページに出るパッチの番号ちがう。どうやら私が採用した方法の方が今回の目的には合致していたらしい。
旅費が節約できたということで、少し子どもの機嫌をとってやろう。