關於PowerShell中使用ArgumentList傳遞陣列
阿新 • • 發佈:2022-12-12
示例
$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個引數確實有的不好,官方這麼推薦
也沒好到哪去...