过滤/匹配事件日志记录

问题描述:

目标:创建一个脚本,该脚本从特定计算机获取最后一天的事件日志,然后查看消息部分以根据特定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>

使用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