ForEach-Object : 无法转换 'System.Object[]'



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

这是我导致问题的脚本:

$result = ForEach-Object $filter {
    Select-String -Pattern $pattern |
    Select-Object Path, LineNumber, Line }
$result | Export-Csv "W:testsearch_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 字符:37+ $result = ForEach-Object <<<<$filter {    + 类别信息 : 无效参数: (:)[ForEach-Object], ParameterBindingException    + FullQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.ForEachObjectCommand

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

>$filter是一个对象列表,而不是一个脚本块。你不能像这样使用它ForEach-Object.将您的代码更改为以下内容:

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

相关内容

最新更新