【问题标题】:Export Specific Windows Security Event Logs导出特定的 Windows 安全事件日志
【发布时间】:2016-04-06 00:39:08
【问题描述】:

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

Get-EventLog -LogName Security 4720,4722,4725 -After ((Get-Date).AddDays(-1)) | Export-CSV "C:\EventLogs.csv"

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

  1. 帐户名称 - 进行更改的帐户
  2. 目标帐户 - 已更改的帐户

有没有办法将上面这两个包括在内?

有人告诉我 Get-WinEvent 更适合执行此操作,但我对 PowerShell 脚本相当陌生,因此我非常感谢您的帮助。谢谢

【问题讨论】:

    标签: powershell event-log


    【解决方案1】:

    一般来说,Export-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 显然总是逐行匹配。

    【讨论】:

    • 嗨。我测试了你的脚本,它就像一个魅力!但是,我得到的唯一条目是目标帐户名称。您能否包括源/主题帐户名和事件触发时间?非常感谢您的帮助!
    • @lapsantos:请看我的更新;这不是解析 Message 字段的最可靠方法,但它可能适用于您的情况。请注意,您可以根据需要添加更多标准字段,例如 Source,只需添加到传递给 Select-Object 的逗号分隔列表(即添加到属性名称数组)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多