【问题标题】:Powershell match export-csv with format shown in Windows Powershell ISEPowershell 将 export-csv 与 Windows Powershell ISE 中显示的格式匹配
【发布时间】:2020-12-21 19:09:40
【问题描述】:

我有一个脚本可以从事件日志中导出事件,例如:

Get-EventLog -LogName Application | Where-Object Source -Match "my application"  | export-csv "$FileDate.csv"

当我打开 CSV 时,它看起来也不像我想要的那样。它显示

EventID,"MachineName","Data","Index","Category","CategoryNumber","EntryType","Message","Source","ReplacementStrings","InstanceId","TimeGenerated"," TimeWritten","用户名","站点","容器" 0,"DESKTOP-ID94AN3","System.Byte[]","21425","(0)","0","错误","已完成 执行项目“Testproject”执行包“失败”执行 失败开始时间:21/12/2020 19:47:52 结束时间:21/12/2020 19:47:56 在服务器上:DESKTOP-ID94AN3 -日志消息

在文本到列之后:

在不应该出现的列中包含信息。它似乎结合了事件查看器的 2 个窗口。带有错误的“上部”窗口和带有详细信息的“下部”窗口。我想要的只是上面的窗口。

如果我在 Windows Powershell ISE 中运行此代码:

Get-EventLog -LogName Application | Where-Object Source -Match "Myapplication"

它看起来也是我想要的样子(在使用文本到列之后):

   Index Time          EntryType   Source                 InstanceID Message                                                                                                                                                                                                                                 
   ----- ----          ---------   ------                 ---------- -------                                                                                                                                                                                                                                 
   21425 Dec 21 19:47  Error       Myapplication LogEn...            0 Message 1                                                                                                                                                                 
   21424 Dec 21 19:47  Information Myapplicationr LogEn...            0 Message 2

如何让我的 CSV 导出也看起来像这样?

【问题讨论】:

  • 您显示的不是 csv 格式……它是 powershell 显示系统,显示来自 CSV 导入的对象集合。实际文件只是文本除以分隔符。
  • 为澄清而编辑。
  • 您说 It looks how I want it too look: 并显示导入 CSV 后 powershell 显示的内容... 但这不是 CSV - 它是通过导入 CSV 创建的 powershell 数组。 ///// 你不能制作一个看起来像那样的 CSV ......它不会是一个 CSV! [grin] 它只是一个结构几乎为零的纯文本文件。
  • 好的,换个说法,这就是我希望它在我的 CSV 上使用文本到列之后的样子。但事实并非如此。 “执行失败”下的所有内容(见屏幕截图)不应与 EventID 在同一列中。
  • 酷!现在,请更改您的问题以说出您真正想要的内容。它仍然是指希望 CSV 文件看起来像纯文本报告。

标签: windows powershell powershell-4.0


【解决方案1】:

在将结果发送到Export-CSV 之前,您可以通过仅选择您关心的特定列来使其看起来像您想要的那样。

Get-EventLog -LogName Application | Where-Object Source -Match "edgeupdate" | 
    Select -first 10 -Property Index, Time, EntryType, Source, InstanceId, Message | 
      Export-Csv -NoTypeInformation

【讨论】:

  • 那行得通,除了消息。如我的屏幕截图所示,它似乎放在第一列下。
  • @Elmer 将-UseCulture 开关附加到Export-Csv cmdlet 上试试。我感觉您的 Excel 使用的分隔符与默认逗号不同。
  • 您的应用程序的消息字段中是否有很多逗号字符?也许是相关的
  • @Elmer 你是双击文件还是导入excel然后text-to-columns? message 可能是一个多行字符串。 text-to-columns 看到换行符时可能会搞砸。只需双击,但一定要使用-UseCulture,否则excel会将其全部放入第1列
  • @Elmer 如果您使用 Excel 期望的分隔符导出(通过添加 `-UseCulture`),则不需要执行 Text-To_Columns。那就是弄乱您的 Excel 工作表的部分。
猜你喜欢
  • 2020-12-03
  • 2020-12-06
  • 2017-02-26
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多