2017-02-09 106 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. 轉換爲HTML和輸出從第1步

問題是步驟3和4之間的日期到文件;我需要在第3步之後再次過濾消息,以便消息字段只查找特定語法(例如LTC),然後在數據發現到HTML文件時輸出該數據。

我在想它只是另一個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>

回答

0

使用Where-Object用於過濾記錄和Select-String從消息中提取字符串:

$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的消息數據將在該消息字段中回傳大量信息,我期望在10.1.2.13或LTC(這看起來正好在上面)的大量數據中匹配,但是我想知道它是否只是'10.1.13'和/或'LTC'作爲字符串,而不僅僅是巨大消息中字符串的一部分。 – elderusr07

+0

請編輯您的問題並提供樣本輸入和輸出。 –

+0

增加了一些預期的輸入/輸出。 – elderusr07