【问题标题】:ForEach-Object : Cannot convert 'System.Object[]'ForEach-Object:无法转换“System.Object []”
【发布时间】:2016-08-07 17:07:34
【问题描述】:

由于某种原因,我有一个脚本突然开始给我带来问题。也许是同事修改了它,我不知道,但我需要让它再次运行。

这是导致问题的脚本:

$result = ForEach-Object $filter {
    Select-String -Pattern $pattern |
    Select-Object Path, LineNumber, Line }
$result | Export-Csv "W:\test\search_results\$name.csv" -NoType

如果我将其导出为 CSV 而不是 $result,这就是 $filter 包含的内容:

全名
\\omega.dce-eir.net\etm\ETMWinHeadPROD\CRA_WEB_UA\cra_htdocs\bt\fq-eng.html
\\omega.dce-eir.net\etm\ETMWinHeadPROD\CRA_WEB_UA\cra_htdocs\bt\ll_fq-eng.html
\\omega.dce-eir.net\etm\ETMWinHeadPROD\CRA_WEB_UA\cra_htdocs\bt\menu-eng.html

运行代码时出现此错误:

ForEach-Object:无法将“System.Object[]”转换为参数“Process”所需的类型“System.Management.Automation.ScriptBlock”。不支持指定的方法。
在 C:\Tools\menu.ps1:41 char:37
+ $result = ForEach-Object 

我在这个脚本中缺少什么?它所需要做的就是在 CSV 中列出的文件上搜索字符串。

【问题讨论】:

    标签: csv powershell foreach


    【解决方案1】:

    $filter 是对象列表,而不是脚本块。你不能像ForEach-Object那样使用它。将您的代码更改为:

    $filter | Select-Object -Expand FullName |
      ForEach-Object { Select-String -Path $_ -Pattern $pattern } |
      Select-Object Path, LineNumber, Line |
      Export-Csv "W:\test\search_results\$name.csv" -NoType
    

    【讨论】:

    • 就是这样!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多