首页 > 解决方案 > 如何在 Powershell 中流水线化变量 cmdlet?

问题描述

我想通过从以下简化示例中的参数插入管道步骤来参数化 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 工作,但是我将不再能够使用调试器。

什么方法可能有效?

谢谢,史蒂芬

标签: powershellpipelinecmdlet

解决方案


您已将脚本块(或从 get-command 返回的命令)指定为管道元素。那是一种表达。

要使用脚本块,请在其前面添加 &。

Read-Dataset $dataset `
| & $datasetProcessor `
| Export-Csv $path -NoTypeInformation

这是一个使用内置 cmdlet 的示例:

$sort=get-command sort-object

get-childitem | & $sort -property Length -descending

推荐阅读