Я создаю массив объектов PSObject с вычисленными свойствами. Мне нужно одно свойство, которое рассчитывается на основе другого свойства того же объекта. Как я могу это сделать? Пример - скажем, у меня есть массив строк, таких как a_1, b_2, c_3 и т. Д., И у меня есть функция поиска, которая возвращает что-то на основе первой части этих строк, то есть someLookUpFunction('a')
вернет AA с вводом a. Теперь мне нужно свойство в моем объекте, у которого есть это вычисленное "AA" на основе моего свойства "name".
$stringArray = @('a_1', 'b_2', 'c_3')
$objectArray = $stringArray | ForEach-Object{
New-Object PSObject -Property @{
'name' = ($_ -split "_")[0]
'extendedName' = {$name = ($_ -split "_")[0]; someLookUpFunction($name) }
}
}
Приведенный выше код частично не работает, так как вывод для свойства «extendedName» - это только этот блок скрипта. Как мне заставить его принять ценность?
'extendedName' = $($name = ($_ -split "_")[0]; someLookUpFunction $name)
. Вы можете просто использовать$name = ($_ -split "_")[0]
перед командойnew-object
. Тогда ссылка$name
внутри. - person AdminOfThings   schedule 09.12.2020foo arg1 arg2
- не как методы C # - ~~foo('arg1', 'arg2')
. Если вы используете,
для разделения аргументов, вы создадите массив, который функция видит как единственный аргумент. Чтобы предотвратить случайное использование синтаксиса метода, используйтеSet-StrictMode -Version 2
или выше, но обратите внимание на другие его эффекты. Дополнительную информацию см. В этом ответе. - person mklement0   schedule 09.12.2020