1

在 .NET 中,如果您有一个子例程,其实现可能会从一个调用更改为另一个调用,您可以将委托传递给使用该子例程的方法。 您也可以在 Powershell 中执行此操作。您还可以使用已被描述为 Powershell 等效匿名函数的脚本块。然而,惯用的 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}
4

1 回答 1

1

那会奏效的。您的函数定义以及传递参数的方式出现了一些语法问题:

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
于 2015-02-12T16:47:42.573 回答