2017-02-27 52 views
1

我相信我错过了一些明显的东西,或者误解了PowerShell的splatting功能。PowerShell splatting无法正常工作

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

文件:测试Splat.ps1

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

然后试图与泼洒执行此,请求为第二个参数的值。

. .\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: 

如果我用这个的情况下直接泼洒,它的工作原理

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

如果它是相关的,我的Exchange命令行管理程序中下PowerShell中这样做3.0

[PS] C:\>$PSVersionTable.PSVersion 

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

回答

6

您确实错过了一些东西,那就是当您想要将一个变量作为函数或cmdlet的参数使用@符号而不是$符号时。在你的例子中,你画出变量的那一行看起来像这样:

Test-Splat @Params 
+0

它总是很简单。哎呀。那样做了 – Kirk