Powershell 导出特定的Windows安全事件日志

Powershell 导出特定的Windows安全事件日志,powershell,event-log,Powershell,Event Log,我需要有关完成PowerShell脚本的帮助,在该脚本中,我可以获取特定的安全事件日志并将其导出到CSV文件。现在我有这条线, Get EventLog-LogName Security 472047224725-After((Get Date).AddDays(-1))|导出CSV“C:\EventLogs.CSV” 这确实得到了我想要的安全事件。然而,它提供的信息是不完整的。输出中不包括这2个 帐户名称-进行更改的帐户 目标帐户-已更改的帐户 是否有办法将上述2项包括在内 我被告知Get W

我需要有关完成PowerShell脚本的帮助,在该脚本中,我可以获取特定的安全事件日志并将其导出到CSV文件。现在我有这条线,

Get EventLog-LogName Security 472047224725-After((Get Date).AddDays(-1))|导出CSV“C:\EventLogs.CSV”

这确实得到了我想要的安全事件。然而,它提供的信息是不完整的。输出中不包括这2个

  • 帐户名称-进行更改的帐户
  • 目标帐户-已更改的帐户
  • 是否有办法将上述2项包括在内


    我被告知Get WinEvent更适合这样做,但我对PowerShell脚本编写还比较陌生,因此我非常感谢您的帮助。谢谢

    通常,
    导出Csv
    将:

    • 看第一个输入对象
    • 检查其类型,并根据该类型具有的所有属性确定要导出的列
    但是,在您的情况下,听起来感兴趣的信息可能包含在类型的
    Message
    属性中

    因此,您必须使用中间的
    Select Object
    调用和精心编制的哈希表,以便将感兴趣的信息提取为单独的属性,然后
    Export Csv
    将导出:

    下面的示例从
    Message
    属性中提取帐户名,并将其导出为单独的列:

    Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) |
     Select-Object EventId, Time, @{ 
       n='AccountName';
       e={ ($_.message -replace '\n', ' ') -replace '.*?account name:\t+([^\s]+).*', '$1' } 
     }, @{
       n='TargetAccount';
       e={ ($_.message -replace '\n', ' ') -replace '.*account name:\t+([^\s]+).*', '$1' } 
     } | Export-Csv 'C:\EventLogs.csv'
    
    请注意,传递给
    -replace
    的第一个正则表达式是如何非贪婪的(
    *?
    ),这意味着第一个匹配项将匹配,而第二个是贪婪的(
    *
    ),这意味着最后一个匹配项将匹配


    用空格替换换行符的额外步骤是必要的,因为
    -replace
    显然总是逐行匹配。

    Hi。我测试了你的剧本,效果很好!但是,我得到的唯一条目是目标AccountName。您能否包括源/主题帐户名和事件触发的时间?我真的很感谢你的帮助@拉普桑托斯:请看我的更新;这不是解析
    消息
    字段的最健壮的方法,但在您的情况下可能会这样做。请注意,您可以根据需要添加更多标准字段,如
    ,只需添加到传递给
    选择对象
    的逗号分隔列表(即,添加到属性名称数组)。