【发布时间】:2018-11-01 02:01:05
【问题描述】:
我想通过从以下简化示例中的参数插入管道步骤来参数化 Powershell 管道。
param (
$path,
$dataset,
$processor
)
$datasetProcessor = Get-Command 'Convert-Noop'
if ( $processor.Keys -contains $dataset.Name ) {
$datasetProcessor = $Processor[$dataset.Name]
}
Read-Dataset $dataset `
| $datasetProcessor `
| Export-Csv $path -NoTypeInformation
这会导致错误
表达式只能作为管道的第一个元素
也许它可以使用 Invoke-Expression 工作,但我将无法再使用调试器。
什么方法可行?
谢谢, 史蒂芬
【问题讨论】:
-
我猜这个错误发生在你有
Read-Dataset ...的地方。尝试删除反引号并将离开管道字符移动到行尾。 PowerShell 会自动在下一行查找管道的其余部分。请参阅我的这个旧答案以了解我在说什么:stackoverflow.com/questions/50406523/…。缩进是可选的,但可以使代码更具可读性。 -
另外,注意:如果
$processor是一个看起来像它的哈希表,那么$processor.ContainsKey($dataset.Name)比$processor.Keys -contains $dataset.Name更好。哈希表是为快速查找而设计的,而-contains运算符将扫描整个键数组。
标签: powershell pipeline powershell-cmdlet