【发布时间】:2015-02-16 00:12:07
【问题描述】:
在this technique to use Cmdlets as "delegates" 的基础上,我留下了这个问题:
有没有办法将带有指定命名或位置参数的 commandlet 传递给另一个使用 powershell 管道将剩余参数绑定到传递的 commandlet 的 commandlet?
这是我希望能够运行的代码 sn-p:
Function Get-Pow{
[CmdletBinding()]
Param([Parameter(ValueFromPipeline=$true)]$base,$exp)
PROCESS{[math]::Pow($base,$exp)}
}
Function Get-Result{
[CmdletBinding()]
Param([Parameter(ValueFromPipeline=$true)]$x,$Cmdlet)
$x | . $Cmdlet
}
10 | Get-Result -Cmdlet 'Get-Pow -exp 2'
10 | Get-Result -Cmdlet 'Get-Pow -exp 3'
10 | Get-Result -Cmdlet Get-Pow -exp 2
10 | Get-Result -Cmdlet Get-Pow -exp 3
对Get-Result 的前两次调用导致CommandNotFoundException,因为Get-Pow -exp 2“不是cmdlet 的名称。”
对Get-Result 的最后两次调用导致NamedParameterNotFound,Get-Result,因为该语法实际上试图将参数-exp 传递给它没有的Get-Result。
还有其他方法可以设置它以使其正常工作吗?
【问题讨论】:
-
您可以为 Get-Results 提供一个可以接受这些参数的可选参数吗?可能是哈希表的形式?
-
@Matt 我没有找到在
$x | . $Cmdlet行上传递参数的方法。但我确实设法让您的“可选参数”方法与Invoke-Expression一起使用。请参阅下面的答案。 -
我收回,
$x | . $Cmdlet @arguments也可以工作。
标签: powershell delegates pipeline