-ArgumentList
делает то, что подразумевает имя, он передает список аргументов команде. Каждое значение из этого списка, если возможно, присваивается определенному параметру. Но у вас есть только один определенный параметр: $array
. Поэтому вы получаете только первое значение из списка аргументов.
Видите, на самом деле это так и должно работать (3 аргумента связаны с 3 параметрами):
Invoke-Command -Session $s -ScriptBlock {
param ($p1, $p2, $p3)
$p1, $p2, $p3 | % { $i = $_ ; Get-culture | select @{name='__id'; ex={$i} } , DisplayName }
} -ArgumentList 1, 2, 3
Итак, на самом деле вы хотите передать один массив как один один параметр.
Один из способов сделать это будет:
-ArgumentList (,(1, 2, 3))
Финальный код:
Invoke-Command -Session $s -ScriptBlock {
param ($array)
$array | % { $i = $_ ; Get-culture | select @{n = '__id'; e = {$i}}, DisplayName }
} -ArgumentList (, (1, 2, 3))
Другим способом (в этом простом случае) будет использование автоматической $args
переменной:
Invoke-Command -ScriptBlock {
$args | % { $i = $_ ; Get-culture | select @{n = '__id'; e = {$i}}, DisplayName }
} -ArgumentList 1, 2, 3