我相信我遗漏了一些明显的东西,或者误解了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
答案 0 :(得分:7)
您确实遗漏了某些内容,当您想要将变量作为函数或cmdlet的参数展开时,使用@
符号而不是$
符号。在您的示例中,您展开变量的行将如下所示:
Test-Splat @Params