投稿

ラベル(W32::EventLog)が付いた投稿を表示しています

Windows Update エラー

イメージ
インストールエラー 0x80070306 はい、また出ました。 最近のMicrosoftの品質管理はどうなってしまったのでしょうか? 今回は、KB5079473を入れようとして、エラー。 再試行してエラー。 日をおいて試してもエラー。 ということで、Updateのたびにエラー表示されるのもイラッとするので、修正する。 まずは、 管理者でコマンドプロンプトを開く dism /online /cleanup-image /restorehealth sfc /scannow を実行する。 イメージのバージョンが異なっているので、更新したかいが有るとよいが…。 sfcは若干時間がかかるが、まぁチェックだけはしておこう。 続いて、 設定 → システム → 回復 → Windows Updateで問題を解決する → 今すぐインストール これを実行すると、Windows Updateの画面が開き、以下のような作業が始まる。 修復バージョンをダウンロードして、それで書き込むっぽい 結構時間がかかりますが、まぁ順調に進みます。 完了すると「再起動」しろと言ってくるので、再起動を実施。  ↓ サインイン画面でサインイン  ↓ ここが、いつもの10倍くらい時間がかかった。  ↓ 無事にデスクトップが表示される 「更新プログラムのチェック」を押しても何も候補は出てこなくなる。

ログの整理 #3

PowerShellでは遅すぎて… 実際問題、ログからcsvに切り出すことは可能になったものの、10MBのログから200kb前後のcsvファイルを生成するのに前回のスクリプトだと約2時間かかるんですねぇ。 そりゃ、1レコードを生成するのに、ログオンIDで再度全部ログを舐めて、PCの名前とIPを拾っているわけで…。 単純に考えればO(n^2)というわけですね。 ログのローテーションというか上限を5MB(半分)にすれば、多分処理速度は1/4程度にまで下がるとは思われるけれど、120分が30分になって、ファイル数が倍なので実質1時間かかるわけで…。orz。 何が遅い? 実際、何に時間がかかっているのかを調べ始めたのだけれど、まずwhere-Objectが結構な時間を消費している。その後foreachで回す処理は激遅い。 結局、イベントログからオブジェクトとして扱っているのが、遅さの原因ぽい。 最適化しようにも、PowerShell自体の扱いに慣れていないので、とっても疲れるです。 他に良い方法は無いものだろうか?と思案し始めた時に、以前オライリーの本で見た記憶があったので、ちょいっと検索してみる。 方針変更! perlのモジュールにW32::EventLogが有るじゃないですか。 早速、マニュアルを参考にテスト用のコードを書いてみる。 さすがに、サーバ上での作業は心配なので、VM上のWindows7にActivePerlを入れてテストすることに。 細かい仕様を決めようか、汎用的に作ろうかと迷いつつも、現状の作業をサックリ行えることを目的に作成した。約1日かけて、コーディング終了。前回までのスクリプトと同じ結果を返すようにするところで、少々苦労したわ。 なので、若干コードは汚い(perlなのでさらに汚いww)とは思うのだけれど、これが素晴らしい性能を発揮してくれた。 コードは以下全体を載せておくので、もし万が一使いたい人は、自己責任にてお願いします。 さて、実際に同じデータを食わせてみると、なっなんと、2時間かかっていた処理を1分以内に終えてくれる!!! あぁ、これで今後のログの整理が快適になる。 1週間分、いや1ヶ月分まとめて処理だって怖くない! あとは、コマンドラインでイベントログを引数として渡せば良い仕様...