中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

Windowsイベントログ(evtx)をCAB形式に圧縮して取得する

1.概要

WindowsPCに不具合があった時などは
とりあえずイベントログを見ることで解決につながることもあります。
ですが、すぐそこにあるPCであれば何の問題ないのですが
各地にあるPCに対してそれを行うことは容易ではありません。
今回はイベントログファイルをcab形式で圧縮して取得しようと思います。
確認環境は【Windows10】になります。

2.イベントログのパス

主に必要なイベントログファイルは下記の3種類になります。

アプリケーションログ
【C:\Windows\System32\winevt\Logs\Application.evtx】

セキュリティログ
【C:\Windows\System32\winevt\Logs\Security.evtx】

システムログ
【C:\Windows\System32\winevt\Logs\System.evtx】

3.CAB形式とは

Microsoftが開発したものでWindows標準の圧縮形式の1つです。
zip型式と比べると圧縮率が高い反面
圧縮処理に時間がかかってしまうのが難点です。
処理スピードよりも、ファイル容量を重視するのであれば
CAB形式はいい選択肢になると思います。

4.CAB形式への圧縮方法

【コマンドプロンプト】から【makecab】コマンドを用いて圧縮します。

5.単純に圧縮してみる

何も考えずに単純に圧縮してみます。
作業フォルダを下図のとおり用意しました。
f:id:tsu--kun:20190820133317p:plain
3種類のイベントログをコピーしておいてあります。
list.txtについては、圧縮したいファイル名が記載されているテキストファイルです。
ファイルの中身は下記のとおりです。

Application.evtx
Security.evtx
System.evtx


では実際にコマンドを打ち込んでみます。
コマンドは下記のとおりです。
オプションの【/f】で圧縮したいファイルのリストを指定しています。

C:\work\compression>makecab /f list.txt
Cabinet Maker - Lossless Data Compression Tool

62,926,848 bytes in 3 files
Total files:              3
Bytes before:    62,926,848
Bytes after:      7,263,606
After/Before:            11.54% compression
Time:                    13.78 seconds ( 0 hr  0 min 13.78 sec)
Throughput:            4460.48 Kb/second


結果は下図のとおりです。
f:id:tsu--kun:20190820133428p:plain
【disk1】~【disk5】までのフォルダが作成され
その中にそれぞれ
【1.cab】~【5.cab】が入っています。
調べてみると何も指定がないとフロッピーディスクのサイズで
分割されてしまうそうです。
圧縮後のファイルサイズが7,263,606Byteに対して
5分割されたファイルサイズがそれぞれ1400KBくらい
だったのでなるほどといった感じでしょうか。
2HD形式でしょうか?

今回は分割なしのCABファイルが欲しいので
オプションを調べて指定していきます。

6.ちゃんと圧縮する

結果目標としては
【list.txt】に記載してあるファイルを
【windowsEventLogs.cab】という名称のCABファイルに圧縮することです。
実際のコマンドは下記のとおりです。

C:\work\compression>makecab.exe /f list.txt  /D MaxDiskSize=67108864 /D CabinetNameTemplate=windowsEventLogs.cab /D DiskDirectoryTemplate=result
Cabinet Maker - Lossless Data Compression Tool

62,926,848 bytes in 3 files
Total files:              3
Bytes before:    62,926,848
Bytes after:      7,262,831
After/Before:            11.54% compression
Time:                    11.10 seconds ( 0 hr  0 min 11.10 sec)
Throughput:            5535.72 Kb/second

コマンドの詳細ですが

オプション名 詳細
MaxDiskSize ここに記載された容量を超えるとファイルが分割されます(512の倍数である必要がある)。
CabinetNameTemplate CABファイルの名前を指定します。
DiskDirectoryTemplate CABファイルを格納するフォルダの名前を指定します。


結果は下図のとおりです。
【result】というフォルダの中に
f:id:tsu--kun:20190820133443p:plain


【windowsEventLogs.cab】という圧縮ファイルが作成されています。
f:id:tsu--kun:20190820133452p:plain