Powershell 如何在变量中保留参数列表

Powershell 如何在变量中保留参数列表,powershell,parameter-passing,Powershell,Parameter Passing,我有一个脚本internal.ps1,它接受某些参数: param ($paramA, $paramB) Write-Host $PSBoundParameters 以及一个调用它的脚本caller.ps1: .\internal -paramA A -paramB B 它非常有效: PS C:\temp> .\caller [paramA, A] [paramB, B] <<<< bounded to both params PS C:\temp>\c

我有一个脚本
internal.ps1
,它接受某些参数:

param ($paramA, $paramB)
Write-Host $PSBoundParameters
以及一个调用它的脚本
caller.ps1

.\internal -paramA A -paramB B
它非常有效:

PS C:\temp> .\caller
[paramA, A] [paramB, B]    <<<< bounded to both params
PS C:\temp>\caller

[paramA,A][paramB,B]
powershell-文件c:\temp\test.ps1@(“A”,“B”)


powershell-命令“c:\temp\test.ps1”A,B

您的脚本需要两个参数,但您以前的尝试只传递一个参数(分别是字符串和数组)。这样做:

$parms = "A", "B"
#...
.\internal.ps1 $parm[0] $parm[1]
(@)应该做您需要的事情。 首先考虑这个简单函数:

function foo($a, $b) { "===> $a + $b" }
使用显式参数调用会产生您期望的结果:

foo "hello" "world"
===> hello + world
现在将这两个值放入一个数组中;传递法线数组会产生错误的结果,正如您所观察到的:

$myParams = "hello", "world"
foo $myParams
===> hello world +
但是,使用splat替换阵列,您将获得所需的结果:

foo @myParams
===> hello + world
这适用于脚本和函数。回到脚本,结果如下:

 .\internal @myParams
[paramA, hello] [paramB, world]

最后,这将适用于任意数量的参数,因此需要知道这些参数的先验知识。

好的,但是当我不知道参数的长度时,我将如何使用它们?我可以让$parms变量以某种方式表示paramA到A的绑定,等等(参见编辑的问题了解用法)?
foo @myParams
===> hello + world
 .\internal @myParams
[paramA, hello] [paramB, world]