出于某种原因,我有一个脚本突然开始给我带来问题。也许一个同事修改了它,我不知道,但我需要让它再次运行。
这是我导致问题的脚本:
$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