1. 程式人生 > 其它 >關於PowerShell中使用ArgumentList傳遞陣列

關於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個引數確實有的不好,官方這麼推薦

也沒好到哪去...

Ref

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting?view=powershell-7.3#using-the-argumentlist-parameter