我相信我遗漏了一些明显的东西,或者误解了 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:
如果我直接使用它而不产生飞溅,它会起作用
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
最佳答案
您确实遗漏了一些东西,那就是当您想将变量作为函数或 cmdlet 的参数时,您可以使用 @
符号而不是 $
象征。在您的示例中,您放置变量的行将如下所示:
Test-Splat @Params
关于PowerShell 飞溅不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42492642/