我相信我错过了一些明显的东西,或者误解了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)
你确实遗漏了一些东西,那就是你想要将变量作为函数或cmdlet的参数进行展开,@而是使用符号而不是$符号.在您的示例中,您展开变量的行将如下所示:
Test-Splat @Params
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |