有没有办法创建支持管道参数绑定的 Cmdlet "delegate"?

Is there a way to create a Cmdlet "delegate" that supports pipeline parameter binding?

在 .NET 中,如果您有一个子例程,其实现可能会从一个调用更改为另一个调用,您可以将委托传递给使用该子例程的方法。 You can also do this in Powershell. You can also use scriptblocks which have been described as Powershell's equivalent of anonymous functions。然而,惯用的 powershell 使用 powershell 的管道参数绑定。但是委托和脚本块似乎都没有使用 Powershell 的管道参数绑定。

是否有一种(惯用的)方式将 powershell 命令行开关传递给另一个命令行开关,同时保留对管道参数绑定的支持?

这是我希望能够执行的操作的代码片段:

Function Get-Square{
    [CmdletBinding()] 
    Param([Parameter(ValueFromPipeline=$true)]$x)
    PROCESS{$x*$x}
}
Function Get-Cube{
    [CmdletBinding()] 
    Param([Parameter(ValueFromPipeline=$true)]$x)
    PROCESS{$x*$x*$x}
}
Function Get-Result{
    [CmdletBinding()]
    Param([Parameter(ValueFromPipeline=$true)]$x,$Cmdlet)
    PROCESS{$x | $Cmdlet}
}

10 | Get-Result -Cmdlet {Get-Square}
10 | Get-Result -Cmdlet {Get-Cube}

行得通。您的函数定义和传递参数的方式存在一些语法问题:

Function Get-Square{
    [CmdletBinding()] 
    Param([Parameter(ValueFromPipeline=$true)]$x)
    $x*$x
}
Function Get-Cube{
    [CmdletBinding()] 
    Param([Parameter(ValueFromPipeline=$true)]$x)
    $x*$x*$x
}
Function Get-Result{
    [CmdletBinding()]
    Param([Parameter(ValueFromPipeline=$true)]$x,$Cmdlet)
    $x | . $cmdlet
}

10 | Get-Result -Cmdlet Get-Square
10 | Get-Result -Cmdlet Get-Cube

100
1000