Splatting subproperty?

时间:2015-09-28 19:41:15

标签: powershell

是否可以从子属性中删除参数?

例如,这里有示例函数来说明:

function Get-Pow{
    param(
        [int]$x,
        [int]$y
        ) 
    [Math]::Pow($x,$y)
}

可以使用以下方法调用此函数:

$args = @{ x=10; y=2 }
Get-Pow @args # outputs 100

这也可以使用简单的迭代来调用:

$powsOfTen = @(
    @{ x=10; y=1 }
    @{ x=10; y=2 }
    @{ x=10; y=3 }
)

foreach($p in $powsOfTen){
    Get-Pow @p # Outputs 10,100,1000
}

但是,如果参数哈希表来自子属性,则它不起作用:

$valuesToCompute = @(
    @{ Id=1; Arguments = @{ x = 10; y= 1} }
    @{ Id=2; Arguments = @{ x = 10; y= 2} }
    @{ Id=3; Arguments = @{ x = 10; y= 3} }

)

foreach($valueToCompute in $valuesToCompute){
    Write-Host $valueToCompute.Id
    Get-pow @($valueToCompute.Arguments) 
}

当args来自子属性时,我该如何调用我的函数?

我尝试了@valueToCompute.Arguments,我尝试了$args = $valueToCompute.Arguments; Get-Pow @args,但我没有尝试过任何工作。

1 个答案:

答案 0 :(得分:1)

这对我有用:

function Get-Pow{
    param(
        [int]$x,
        [int]$y
        ) 
    [Math]::Pow($x,$y)
}

$valuesToCompute = @(
    @{ Id=1; Arguments = @{ x = 10; y= 1} }
    @{ Id=2; Arguments = @{ x = 10; y= 2} }
    @{ Id=3; Arguments = @{ x = 10; y= 3} }

)

foreach($valueToCompute in $valuesToCompute){
    Write-Host $valueToCompute.Id
    $splat = $valueToCompute.Arguments;
    Get-pow @splat
}

请注意,通过阅读the splatting doc@Args是一个保留变量。请参阅" SPLATTING COMMAND PARAMETERS"。

部分