【问题标题】:Select-Object omitting output from Select-String powershellSelect-Object 省略了 Select-String powershell 的输出
【发布时间】:2017-12-16 08:31:44
【问题描述】:

我编写了一个 Powershell 脚本,它在日志文件中查找字符串(例如 ERROR)并抓取这些行并将这些行输出到文件中,以便于阅读等(我所在的行业有非常大的日志文件),但我有一个问题。之前,当代码的(相关)部分看起来像这样时:

Select-String -Path "$file" -Pattern "$string" -CaseSensitive | Out-File -filepath $filepath

它会输出文件路径,行号,然后是实际的行,这使得文件非常混乱。好吧,我只需要行和行号,所以我这样做了:

Select-String -Path "$file" -Pattern "$string" -CaseSensitive | Select-Object -Property LineNumber,Line | Out-File -filepath $filepath

这将返回如下所示的行:

978 2017-07-10 10:46:11,288 ERROR [Music...

即是行号,然后是行,该行总共只有 35 个字符。
在我将Select-String 传送到Select-Object 之前,脚本会输出整行,但现在使用Select-Object 它会省略一些输出。我尝试将-verbose 参数添加到Select-StringSelect-Object,但没有任何效果。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    你可以试试这个吗:

    Select-String -Path "test.xml" -Pattern "ERROR" -CaseSensitive | ft -Property LineNumber,Line -Wrap  | Out-File -FilePath c:\out.txt
    

    你的问题的原因是屏幕缓冲区长度(increasing powershell screen buffer width),你也可以改变它,但上面的sn-p更简单有效

    【讨论】:

    • 太棒了!我没有想到屏幕缓冲区的事情,我会考虑扩展它,但现在把它写成一个表格并包装单词就可以了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多