PowerShell splatting无法正常工作

时间:2017-02-27 17:59:24

标签: powershell

我相信我遗漏了一些明显的东西,或者误解了PowerShell的splatting功能。

我正在使用哈希表将参数传递给自定义函数,但即使是一个简单的例子,它似乎也没有参数。

文件:Test-Splat.ps1

function Test-Splat
{
    param(
        [Parameter(Mandatory=$true)][string]$Name,
        [Parameter(Mandatory=$true)][string]$Greeting
    )
    $s = "$Greeting, $Name"
    Write-Host $s
}

然后尝试使用splatting执行此操作,请求第二个参数的值。

. .\Test-Splat.ps1
$Params = @{
    Name = "Frank"
    Greeting = "Hello"
}
Test-Splat $Params

产生以下结果

cmdlet Test-Splat at command pipeline position 1
Supply values for the following parameters:
Greeting: 

如果我直接使用它而不用splatting,它可以正常工作

Greeting: [PS] C:\>Test-Splat -Name "Frank" -Greeting "Hello"
Hello, Frank

如果它相关,我在PowerShell 3.0下的Exchange命令行管理程序中执行此操作

[PS] C:\>$PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      -1     -1

1 个答案:

答案 0 :(得分:7)

您确实遗漏了某些内容,当您想要将变量作为函数或cmdlet的参数展开时,使用@符号而不是$符号。在您的示例中,您展开变量的行将如下所示:

Test-Splat @Params