2017-02-09 4 views
0

목표 : 특정 컴퓨터에서 마지막 날의 이벤트 로그를 가져온 스크립트를 작성한 다음 메시지 섹션에서 특정 IP (첫 번째)를 기준으로 데이터를 필터링 한 다음 시작하는 항목에 대해서만 해당 데이터를 다시 필터링하십시오 특정 키워드로 출력 한 다음 HTML로 출력합니다.이벤트 로그 레코드 필터링/일치

코드 :

$fileDate = (Get-Date -Format ddMMyyyy) + ".html" 
$EventGrab = Invoke-Command { 
    Get-EventLog -LogName Security -After (Get-Date).AddDays(-1) -EntryType FailureAudit 
} -ComputerName whatever 
$EventGrab | 
    Sort-Object -Property TimeWritten -Descending | 
    Select-String -InputObject {$_.TimeWritten,$_.message} -Pattern "10.1.2.13" | 
    ConvertTo-Html | 
    Out-File C:\$fileDate 

거친 단계 :

  1. 날짜로 파일을 작성합니다.
  2. 지난 24 시간 동안 FailureAudit이 포함 된 보안 로그의 이벤트 로그를 가져옵니다.
  3. 위의 패턴 (장치)에 대한 메시지 섹션을 확인하십시오.
  4. 1.

문제점 3 단계 및 4 단계 사이에서 날짜를 HTML 파일로 변환하여 출력으로; 메시지 필드를 가져 와서 특정 구문 (예 : LTC) 만보고 HTML 파일에서 찾은 경우 해당 데이터를 출력하는 3 단계 후에 메시지를 다시 필터링해야합니다.

나는 단지 그 또 다른 Select-String, 또는 뭔가를 생각하고 있지만 그것을 알아낼 수 없습니다.

예 입력 (Select-String 부 @)

02/08/2017 15:51:57 Network Policy Server denied access to a user. 
Contact the Network Policy Server administrator for more information. 
User: 
Security ID:     S-1-0-0 
Account Name:     <scrubbed> 
Account Domain:     <scrubbed> 
Fully Qualified Account Name: <scrubbed> 

Client Machine: 
Security ID:     S-1-0-0 
Account Name:     - 
Fully Qualified Account Name: - 
OS-Version:      - 
Called Station Identifier:  00-1B-53-41-5A-57 
Calling Station Identifier:  F8-CA-B8-57-1A-9B 

NAS: 
NAS IPv4 Address:    10.1.2.13 
NAS IPv6 Address:    - 
NAS Identifier:     - 
NAS Port-Type:     Ethernet 
NAS Port:      50324 

RADIUS Client: 
Client Friendly Name:   <scrubbed> 
Client IP Address:    10.1.2.13 

Authentication Details: 
Connection Request Policy Name: <scrubbed> 
Network Policy Name:   - 
Authentication Provider:  Windows 
Authentication Server:   <scrubbed> 
Authentication Type:   PEAP 
EAP Type:      Microsoft: Secured password (EAP-MSCHAP v2) 
Account Session Identifier:    - 
Logging Results:    Accounting information was written to the local log file. 
Reason Code:     8 
Reason:       The specified user account does not exist. 

예상 출력 : 단지 이름이다 host/LTC<whatever> 고려되도록 변경

전술. 메시지에서 문자열을 추출하기위한 기록 및 Select-String를 필터링

답변

0

사용 Where-Object :

$EventGrab | 
    Sort-Object -Property TimeWritten -Descending | 
    Where-Object { 
     $_.Message -like '*10.1.2.13*' -and 
     $_.Message -like '*LTC*' 
    } | 
    Select-Object TimeWritten, @{n='Account';e={ 
     Select-String -InputObject $_.Message -Pattern 'Account Name:\s+(.*LTC.*)' | 
      Select-Object -Expand Matches | 
      ForEach-Object { $_.Groups[1].Value } 
    }} | 
    ConvertTo-Html | 
    Out-File C:\$fileDate 
+0

흠. 그건 제대로 작동하지 않는 것 같아요 (데이터 출력을 얻는 것). 나는 그것이 틀렸다고 설명했을지도 모른다라고 생각한다, 또는, 나는 무엇인가 놓치고있다. EventGrab의 $ _. Message 데이터에서 Message 필드에 많은 정보를 표시 할 수 있습니다. 위에서 본 10.1.2.13 또는 LTC 데이터 중 엄청난 양의 데이터를 찾으려하지만 '10 .1.2.13 '및/또는'LTC '가 방금 거대한 메시지 내의 문자열의 일부가 아닌 문자열 인 지 궁금합니다. – elderusr07

+0

질문을 편집하고 샘플 입력과 출력을 제공하십시오. –

+0

일부 입출력이 추가되었습니다. – elderusr07