Powershell 筛选/匹配事件日志记录

Powershell 筛选/匹配事件日志记录,powershell,powershell-3.0,event-log,Powershell,Powershell 3.0,Event Log,目标:创建一个脚本,从特定计算机获取最后一天的事件日志,然后查看消息部分,根据特定IP筛选数据(首先),然后仅针对以特定关键字开头的项目再次筛选数据,然后输出到HTML 代码: 大致步骤: 创建带有日期的文件 使用FailureAudit在过去24小时内从安全日志中获取事件日志 检查消息部分以了解上述模式(设备) 转换为HTML并输出为文件,其中包含步骤1中的日期 问题在步骤3和步骤4之间;我需要考虑在第3步之后再次过滤消息,这将获取消息字段,并且只在其中查找特定语法(例如LTC),然后在找到该

目标:创建一个脚本,从特定计算机获取最后一天的事件日志,然后查看消息部分,根据特定IP筛选数据(首先),然后仅针对以特定关键字开头的项目再次筛选数据,然后输出到HTML

代码:

大致步骤:

  • 创建带有日期的文件
  • 使用FailureAudit在过去24小时内从安全日志中获取事件日志
  • 检查消息部分以了解上述模式(设备)
  • 转换为HTML并输出为文件,其中包含步骤1中的日期
  • 问题在步骤3和步骤4之间;我需要考虑在第3步之后再次过滤消息,这将获取消息字段,并且只在其中查找特定语法(例如LTC),然后在找到该数据时将其输出到HTML文件中

    我想这只是另一个
    选择字符串
    ,或者什么东西,但无法理解

    输入示例(@
    选择字符串
    部分):

    2017年8月2日15:51:57网络策略服务器拒绝用户访问。
    有关详细信息,请与网络策略服务器管理员联系。
    用户:
    安全ID:S-1-0-0
    帐户名:
    帐户域:
    完全限定帐户名:
    客户端计算机:
    安全ID:S-1-0-0
    帐户名:-
    完全限定帐户名:-
    操作系统版本:-
    被叫站标识符:00-1B-53-41-5A-57
    呼叫站标识符:F8-CA-B8-57-1A-9B
    NAS:
    NAS IPv4地址:10.1.2.13
    NAS IPv6地址:-
    NAS标识符:-
    NAS端口类型:以太网
    NAS端口:50324
    RADIUS客户端:
    客户友好名称:
    客户端IP地址:10.1.2.13
    身份验证详细信息:
    连接请求策略名称:
    网络策略名称:-
    身份验证提供程序:Windows
    身份验证服务器:
    认证类型:PEAP
    EAP类型:Microsoft:安全密码(EAP-MSCHAP v2)
    帐户会话标识符:-
    日志记录结果:会计信息已写入本地日志文件。
    原因代码:8
    原因:指定的用户帐户不存在。
    
    预期产出:


    上述更改使得只有帐户名为
    host/LTC

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

    嗯,这似乎没有正常工作(没有得到数据输出)。我想我可能解释错了,或者我遗漏了什么。在EventGrab的$_u2;.Message数据中,它将在消息字段中返回大量信息,我希望在10.1.2.13或LTC的大量数据中进行匹配,如上图所示,但我想知道它是否只寻找“10.1.2.13”和/或“LTC”作为字符串,而不是巨大消息中字符串的一部分。请编辑您的问题并提供示例输入和输出。添加了一些预期的输入/输出。由于
    -match
    是基于正则表达式的,我会将模式更改为
    '10\.1\.2\.13'
    进入一个var
    $PatternIP=[RegEx]::Escape('10.1.2.13')
    。否则,像2013年1月10日这样的日期也可以匹配。@LotPings的观点很好。谢谢你的提醒。不过,我没有转义
    -match
    的模式,而是切换到通配符匹配。应提供稍好的性能。
    $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