有没有办法创建一个Cmdlet"委托"支持管道参数绑定?

时间:2015-02-12 16:23:38

标签: powershell delegates pipeline scriptblock

在.NET中,如果您有一个子例程,其实现可能会从一个调用更改为另一个调用,则可以将委托传递给使用该子例程的方法。 You can also do this in Powershell。您还可以使用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}

1 个答案:

答案 0 :(得分: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