关于PowerShell中使用ArgumentList传递数组
示例
$array = 'Hello', 'World!'
Invoke-Command -ScriptBlock {
param([string[]]$words)
$words -join ' '
} -ArgumentList $array
输出
Hello
为什么?
因为PowerShell处理的时候使用 数组展开 ,去处理了参数
我们将需要的两个参数$a, $b放在一个数组中传递,PowerShell会自动展开实参数组
$a = $arg[0]
$b = arg[1]
所以,当我们只有一个参数的时候,又传递的是数组,那么这个数组就被展开了,取了数组中的arg[0]作为参数值了。
聪明的你肯定想到好办法了
那我们将数组包在一个数组中,展开外面的数组,arg[0]不就是实际传递的数组吗?
可以看到,并没有起作用,PowerShell会一直展开数组,实际上,你就算包N个数组,它也给你展开(why?!)
方案
既然2个参数的时候能正确展开,那我们就传递2个参数,第一个还是我们需要的,第二个其实无所谓了,它的主要作用就是为了让PowerShell正确展开数组而已
但是写2个参数确实有的不好,官方这么推荐
也没好到哪去...