PowerShell splatting无法正常工作

Kir*_*irk 3 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
}
Run Code Online (Sandbox Code Playgroud)

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

. .\Test-Splat.ps1
$Params = @{
    Name = "Frank"
    Greeting = "Hello"
}
Test-Splat $Params
Run Code Online (Sandbox Code Playgroud)

产生以下结果

cmdlet Test-Splat at command pipeline position 1
Supply values for the following parameters:
Greeting: 
Run Code Online (Sandbox Code Playgroud)

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

Greeting: [PS] C:\>Test-Splat -Name "Frank" -Greeting "Hello"
Hello, Frank
Run Code Online (Sandbox Code Playgroud)

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

[PS] C:\>$PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      -1     -1
Run Code Online (Sandbox Code Playgroud)

The*_*ian 8

你确实遗漏了一些东西,那就是你想要将变量作为函数或cmdlet的参数进行展开,@而是使用符号而不是$符号.在您的示例中,您展开变量的行将如下所示:

Test-Splat @Params
Run Code Online (Sandbox Code Playgroud)