Windowsのログを収集するバッチファイル

WindowsのOSログを収集して圧縮するプログラムです。

また、SecurityログでSecurityログの保存容量を大きくした場合、Securityログに関して肥大化したログも分割して圧縮することができます。

OSログの収集には管理者権限が必要なので、権限の昇格を行います。

ログファイル収集くん.cmd

@echo off
cls

::管理者として実行されているか確認
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
if "%%~i" =="BUILTIN\Administrators" set ADMIN=yes
if "%%~i" =="Mandatory Label\High Mandatory Level" set ELEVATED=yes
)

if "%ADMIN%" neq "yes" (

echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo 管理者権限でないため終了します。
echo.
echo.
pause
exit

)

if "%ELEVATED%" neq "yes" (

echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo このファイルは管理者権限の実行が必要です。
echo.
echo 管理者権限でないため管理者へ昇格を行います。
echo.
echo しばらくお待ちください。
echo.
echo.

timeout /t 3 > nul
goto runas
)

for /F " tokens=1-3 delims=/ " %%a in ('date /t') do set fir=%%a%%b%%c

cls
echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo このバッチは、パソコン内のOSログファイルをコピーして
echo.
echo.
echo 「%fir%_%COMPUTERNAME%_LOG_Part*.cab」として圧縮保存してます。
echo.
echo 「Security.evtx」はさらに「Security_Part*.cab」として20M単位で
echo.
echo 分割して圧縮保存します。
echo.
echo.
echo.
echo.
echo 作成元:DeepServer
echo.
echo.
pause

cls
echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo ログファイルを保存中!!
echo.

if not exist C:\Windows\System32\winevt\Logs goto :ER1
mkdir C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG
copy C:\Windows\System32\winevt\Logs\* C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\

cls
echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Security.evtx" (
for /f "tokens=1-3 delims=" %%1 in ('dir /s /a-d C:\Windows\System32\winevt\Logs\Security.evtx') do if %%2==個のファイル set size=%%3
if "%size%" geq "20,480,000" (
echo Securityログを分割・圧縮中!!
echo.
)
)
echo .Set CabinetNameTemplate=Security_Part*.cab > C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set DiskDirectoryTemplate=C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set MaxDiskSize=20480000 >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set Cabinet=on >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set Compress=on >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set InfFileName=NUL >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
echo .Set RptFileName=NUL >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Security.evtx" (
echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Security.evtx" >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
for /f "tokens=1-3 delims=" %%1 in ('dir /s /a-d C:\Windows\System32\winevt\Logs\Security.evtx') do if %%2==個のファイル set size=%%3
if "%size%" geq "20,480,000" call :seclog
)
if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Security*.*" (
echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\System.evtx" >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
for /f %%a in ('dir /b C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Security*.*') do echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\%%a" >> C:\Users\%USERNAME%\Desktop\Secucomp.ddf
for /f "tokens=1-3 delims=" %%1 in ('dir /s /a-d C:\Windows\System32\winevt\Logs\Microsoft-Windows-Security*.*') do if %%2==個のファイル set size=%%3
if "%size%" geq "20,480,000" call :seclog
)

echo.
echo 全ログフォルダを分割・圧縮中!
echo.
echo.

echo .Set CabinetNameTemplate=%fir%_%COMPUTERNAME%_LOG_Part*.cab > C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set DiskDirectoryTemplate=C:\Users\%USERNAME%\Desktop >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set MaxDiskSize=2048000000 >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set Cabinet=on >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set Compress=on >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set InfFileName=NUL >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
echo .Set RptFileName=NUL >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf

if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\System.evtx" (
echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\System.evtx" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)

if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Application.evtx" (
echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Application.evtx" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)
if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Application*.*" (
for /f %%a in ('dir /b C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Application*.*') do echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\%%a" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)

if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Setup.evtx" (
echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Setup.evtx" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)

if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Security*.*" (
for /f "tokens=1-3 delims=" %%1 in ('dir /s /a-d C:\Windows\System32\winevt\Logs\Security*.*') do if %%2==個のファイル set size=%%3
if "%size%" leq "20,480,000" (
for /f %%a in ('dir /b C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Security*.*') do echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\%%a" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)
)

if exist "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Security*.*" (
for /f "tokens=1-3 delims=" %%1 in ('dir /s /a-d C:\Windows\System32\winevt\Logs\Microsoft-Windows-Security*.*') do if %%2==個のファイル set size=%%3
if "%size%" leq "20,480,000" (
for /f %%a in ('dir /b C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\Microsoft-Windows-Security*.*') do echo "C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG\%%a" >> C:\Users\%USERNAME%\Desktop\Logcomp.ddf
)
)

Makecab /f C:\Users\%USERNAME%\Desktop\Logcomp.ddf

del C:\Users\%USERNAME%\Desktop\Logcomp.ddf
del C:\Users\%USERNAME%\Desktop\Secucomp.ddf
del /Q /F C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG

mkdir C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%

echo このログはWindows純正のCAB圧縮をしてあります。 >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo. >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo 解凍は「%COMPUTERNAME%_LOG_Part1.cab」上で右クリックし >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo. >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo 表示されたメニューから「プログラムから開く」→「エクスプローラ」 >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo. >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt
echo でファイルを取り出すことができます。 >> C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%\Readme.txt

move C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG_Part*.cab C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%
rmdir /s /q C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG

cls
echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo 「%fir%_%COMPUTERNAME%」フォルダにログファイルを保存しました。
echo.
echo.
echo.
echo 以上でログの収集及び圧縮作業を終了します。
echo.
echo.
echo.
echo.
pause
exit

rem エラー処理
:ER1
color CF
echo.
echo エラーが発生しました。
echo.
echo C:\Windows\System32\winevt\Logsにアクセスできません。
echo.
echo 終了します。
echo.
echo.
echo 何かキーを押すと終了します。
timeout /t 10
exit

:seclog

Makecab /f C:\Users\%USERNAME%\Desktop\Secucomp.ddf
move C:\Users\%USERNAME%\Desktop\Security_Part*.cab C:\Users\%USERNAME%\Desktop\%fir%_%COMPUTERNAME%_LOG

exit /b

:runas

if "%1" == "" (
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 REPEATED -Verb runas"
) else (
echo ■■■■■■■■■■■ ログファイル収集くん ■■■■■■■■■■■
echo.
echo.
echo 管理者権限への昇格に失敗したため終了します。
echo.
echo.
pause
exit

)

exit

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です