以CSV格式提取Windows事件日志

时间:2017-01-26 03:45:53

标签: windows powershell

如何以CSV格式提取Windows事件日志? 有许多页面使用“| export-csv xxxx.csv”解释。 但是当我选择“将所有事件保存为...”时,我需要与提取的csv文件格式相同的格式 - > “另存为类型= CSV”。

enter image description here

有没有命令呢? 或者我是否需要向export-csv命令添加参数?

1 个答案:

答案 0 :(得分:1)

注意:在以下答案中,我使用了术语属性,因为这是正确的PowerShell术语,但属性将变为生成的csv中的列。

您遇到的问题有两个:

  1. Get-EventLog检索的信息多于从GUI导出到csv的信息。
  2. 要解决此问题,您需要通过查看csv文件来识别所需的属性,这些文件包括级别,日期和时间,来源,事件ID,任务类别'

    GUI导出文件中还有最后一列未命名,但似乎是事件'消息'。

    然后,您需要将PoSH命令提供给您的数据减少到GUI为您提供的相同子集。

    通过将信息传递给Select-Object命令来启用此功能:

    请注意,此处仅将应用程序日志用作示例。

    Get-EventLog -LogName Application | Select-Object -Property EntryType,TimeGenerated,Source,EventID,Category,Message
    

    此处属性的顺序非常重要,因为这是将数据导出到csv时的顺序。

    这可以按正确的顺序为您提供所需的相关数据。

    1. 第二个问题是您的列标题不同,因为GUI和PowerShell具有不同的属性名称。例如,level(来自GUI)和EntryType(来自Powershell)powershell可能会为您提供GUI正在转换为另一个的正确基础名称。如果要更改属性名称,还可以使用select-object cmdlet执行此操作。
    2. 因此,要在数据中将名称EntryType更改为Label,您可以执行以下操作:

      Get-EventLog -LogName Application | Select-Object -Property @{n = 'Label'; e = { $_.Entrytype }}
      

      请注意,这只会显示Label属性。为清晰起见,我已将属性缩减为一个

      更改datetime属性以及标签:

      Get-EventLog -LogName Application | Select-Object -Property @{n = 'Label'; e = { $_.Entrytype }}, @{n = 'Date and Time'; e = { $_.TimeGenerated }}
      

      您可以对其他属性使用此方法。

      要将数据导出到csv,您现在只需将结果通过管道传输到export-CSV。为清楚起见,我省略了更改属性名称的代码。

      Get-EventLog -LogName Application | Select-Object -Property EntryType,TimeGenerated,Source,EventID,Category,Message | Export-CSV -Path c:\events.csv -NoClobber
      

      最后的-NoClobber阻止PoSH在csv的第一行放入一些元数据,以帮助它更多地确认你想要的东西。