powershell: добавьте pscustomobject в ArrayList, но все элементы перейдут в 1-е свойство
Я только что создал простую функцию "f", которая добавляет элемент pscustomobject в массив, но при его отображении результат не тот, который я ожидал:
$c=New-Object System.Collections.ArrayList($null)
function f([string]$a1,[string]$a2)
{
$c.Add([PSCustomObject]@{item1=$a1;item2=$a2})
}
f("kkk","aaa")
$c
результат:
item1 item2
----- -----
kkk aaa
Мне кажется, что "kkk" и "aaa" переходят к item1, если я наберу
$c.item1
это печатает
kkk aaa
Зачем? Я ожидаю, что item1 будет "kkk", а item2 будет "aaa".
2 ответа
Посмотрите на полезные функции powershell здесь: https://stackru.com/tags/powershell/info
PowerShell разделяет аргументы функции пробелами, а не запятыми.
для тех, кто не читает комментарии, @TheMadTechnician дал вам два правильных способа вызова функции с аргументами в PS:f "kkk" "aaa"
или е -a1 "kkk" -a2 "aaa"
Хорошо, как и предполагалось, отвечаю. Каясакс действительно дал правильный ответ, даже если он не помог вам решить проблему. Причина того, что обе эти строки назначены первому свойству, заключается в том, что вы неправильно вызвали свою функцию. Вы фактически передали 1 аргумент функции, который является массивом, содержащим две строки. Чтобы правильно передать несколько аргументов в функцию, либо укажите их по имени (производное от переменной, которой вы назначаете параметр внутри функции, либо любые объявленные псевдонимы), либо вы можете передать их, не называя их в том порядке, в котором они были объявлены в функция, разделенная пробелом.
В вашем коде вы эффективно делаете это:
f -a1 ("kkk","aaa") -a2
Чтобы исправить проблему, вы можете передать аргументы по позиции:
f "kkk" "aaa"
Или вы можете передать аргументы по имени (порядок не имеет значения при передаче по имени):
f -a1 "kkk" -a2 "aaa"
Выполнение любого из них приведет к желаемому результату.