반응형
I. Log -> CSV 병합
II. 특정 조건만 CSV로 내보내기
IIS의 영역에 접근한 사용자의 로그인 기록은 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 폴더로 복사
C:\Log 폴더에서 Script 실행
아래와 같이 한 개의 CSV 파일로 병합
결과 확인
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
아래와 같이 필요한 데이터만 필터링해서 추출하기 때문에 용량을 줄일 수 있습니다.
반응형