Извлечь строку данных из массива и назначить их переменной путем объединения в PowerShell

У меня есть массив объектов, таких как:

$arrayServ = New-Object System.Collections.ArrayList(,$serv)

этот массив содержит несколько объектов, таких как:

name        prefix                     tenants                  
----        ------                     -------                  
TOTO        http://home/toto           bob, michael, ramy, anna
Nav         http://8.8.8.8/google      com, uk, fr

Я пытаюсь извлечь все данные в свойстве name и поместить их в переменную и объединить эту переменную с другой переменной, которая является счетчиком name,

Что-то вроде этого:

$liste = "$i. $arrayServ [$i]"

Почему я хочу это сделать? Это потому, что я хочу показать, что $liste в InputBox, например:

$liste = "$i. $arrayServ [$i]"
$msg = $liste -join "`n"
$item = InputBox $msg -title "Your choice"

Блок ввода "Ваш выбор"

Кто-нибудь знает, как я могу это сделать, пожалуйста?

2 ответа

Решение

Насколько я могу судить, у вас уже есть массив объектов в $serv так что не должно быть никаких причин помещать это в ArrayList..

Если это так, вы можете создать $liste массив, как это:

$liste = @()
$i = 1
$serv | Select-Object -ExpandProperty name | ForEach-Object {
    $liste += "{0}. {1}" -f $i++, $_
}

а затем использовать его для ввода сообщения с помощью

$msg = $liste -join [Environment]::NewLine

Используя ваши примеры, это вернет

1. TOTO
2. Nav

Поместив это в поле ввода:

Add-Type -AssemblyName 'Microsoft.VisualBasic'
$item = [Microsoft.VisualBasic.Interaction]::InputBox($msg, "Votre choix")

Если вы хотите поместить все имена в переменную, вы можете использовать indexOf(value) в вашей конкатенации:

$arrayServ = New-Object System.Collections.ArrayList(,$serv)

Итак, создайте массив только из имен:

$names = $arrayServ.name

На основании приведенных в качестве примера данных, если вы знали, что хотите отобразить второй элемент из этого списка, получите значение индекса 'Nav' и добавьте 1, поскольку первый индекс массива равен 0, и вы хотите количество, а не индекс позиция:

$count = $names.indexOf('Nav') + 1

Задавать $liste на счет, а затем интерполировать элемент в позиции $names минус 1 от $count так что вы получите правильное значение.

$liste = "$count. $($names[$count - 1])"

Это должно отобразить

2. Nav
Другие вопросы по тегам