반응형
I. Log -> CSV 병합
II. 특정 조건만 CSV로 내보내기

 

IIS 영역에 접근한 사용자의 로그인 기록은 IIS Log 상에서 확인할 있습니다.

Default Log 경로

 

IIS Log 상단에 기록된 정보때문에 병합 필터링에 수작업으로 처리해야하는 영역이 있습니다.

IIS Log 샘플

 

해당 영역을 지우고, 각각의 파일을 병합해서 보거나 Log Parser 같은 Tool 이용해야 하는 번거로움이 있습니다.

쿼리작업에 능숙한 분들은 쉽게 쿼리할 있지만, 일반 담당자들은 진입장벽이 높을 밖에 없습니다.

 

그래서 ChatGPT 도움으로 #으로 처리된 영역을 제거한 , 개의 폴더에 있는 로그파일 병합하는 Script 제작하였습니다.

 

I. Log -> CSV 병합

Get-ChildItem -File | ForEach-Object {
    $logFile = $_.FullName
    $content = Get-Content $logFile | Where-Object { -not ($_ -like '#*') }
    $content | ForEach-Object {
        $fields = $_ -split ' '
        [PSCustomObject]@{
            Date = $fields[0]
            Time = $fields[1]
            S_IP = $fields[2]
            CS_Method = $fields[3]
            CS_URI_Stem = $fields[4]
            CS_URI_Query = $fields[5]
            S_Port = $fields[6]
            CS_Username = $fields[7]
            C_IP = $fields[8]
            CS_UserAgent = $fields[9]
            CS_Referer = $fields[10]
            SC_Status = $fields[11]
            SC_SubStatus = $fields[12]
            SC_Win32_Status = $fields[13]
            Time_Taken = $fields[14]
        }
    }
} | Export-Csv -Path C:\Log\output.csv -NoTypeInformation -Encoding UTF8

로그 파일들을 C:\Log 폴더로 복사

Log 복사

 

C:\Log 폴더에서 Script 실행

Log 파일 병합

 

아래와 같이 개의 CSV 파일로 병합

병합 결과

 

결과 확인

Excel로 결과 확인

 

II. 특정 조건만 CSV로 내보내기

여기서 특정 조건의 내용만 추출하고 싶다면 다음과 같이 진행할 있습니다.

#CS_Username이 corp\ex-admin 인 경우
Import-Csv -Path C:\log\output.csv | Where-Object { $_.CS_Username -like 'corp\ex-admin' } | Export-Csv -Path C:\log\ex-admin.csv -NoTypeInformation

 

아래와 같이 필요한 데이터만 필터링해서 추출하기 때문에 용량을 줄일 있습니다.

반응형

+ Recent posts