首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将一个带有一些参数的Cmdlet传递给另一个Cmdlet,该Cmdlet通过管道将剩余的参数传递给它?

有没有办法将一个带有一些参数的Cmdlet传递给另一个Cmdlet,该Cmdlet通过管道将剩余的参数传递给它?
EN

Stack Overflow用户
提问于 2015-02-13 03:43:56
回答 1查看 172关注 0票数 0

this technique to use Cmdlets as "delegates"的基础上,我留下了这样的问题:

有没有办法将具有指定命名或位置参数的命令小程序传递给另一个使用powershell管道将其余参数绑定到已传递的命令小程序的命令小程序?

下面是我希望能够运行的代码片段:

代码语言:javascript
复制
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,而它没有这个参数。

有没有其他方法可以设置它,使其正常工作?

EN

回答 1

Stack Overflow用户

发布于 2015-02-13 04:51:58

我不确定这是不是最好的方法,但至少它自始至终都很像powershell的习惯用法:

代码语言:javascript
复制
Function Get-Amount{
    [CmdletBinding()] 
    Param(
    [Parameter(ValueFromPipeline=$true)]$t,
    [Parameter(position=1)]$r,
    [Parameter(position=2)]$P)
PROCESS{$P*[math]::Pow(1+$r,$t)}
}
Function Get-Result{
    [CmdletBinding()]
    Param(
    [Parameter(ValueFromPipeline=$true)]$x,
    [Parameter(Position=1)]$Cmdlet,        #positional arguments here makes calling more readable
    [Alias('args')]                        #careful, $args is a special variable
    [Parameter(Position=2)]$Arguments=@()) #the default empty array is required for delegate style 1
PROCESS{
    #invoke style 1                        #works with delegate styles 1,2,3
    iex "$x | $Cmdlet @Arguments"          

    #invoke style 2                        #works with delegate styles 2,3
    $x | . $Cmdlet @Arguments              
}}

5,20 | Get-Result 'Get-Amount -r 0.05 -P 100' #delegate style 1
5,20 | Get-Result Get-Amount 0.05,100         #delegate style 2
5,20 | Get-Result Get-Amount @{r=0.05;P=100}  #delegate style 3

这会导致:

代码语言:javascript
复制
127.62815625
CommandNotFoundException
265.329770514442
CommandNotFoundException
127.62815625
127.62815625
265.329770514442
265.329770514442
127.62815625
127.62815625
265.329770514442
265.329770514442
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28486411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档