从数组中提取数据字符串,并通过PowerShell中的串联将它们分配给变量

问题描述 投票:1回答:2

我有一组对象,如:

$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]"

为什么我要这样做?这是因为,我想在InputBox中显示$liste,如:

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

InputBox“你的选择”

enter image description here

有人知道我该怎么办?

powershell variables concatenation inputbox arrayobject
2个回答
1
投票

据我所知,你已经在$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")

enter image description here


0
投票

如果要将所有名称放入变量中,可以在串联中使用indexOf(value)

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

所以创建一个只有名称的数组:

$names = $arrayServ.name

根据提供的示例数据,如果您知道要显示该列表中的第二项,请获取索引值'Nav'并添加1,因为数组的第一个索引是0并且您想要计数,而不是索引位置:

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

$liste设置为计数,然后在$names$count减去1的位置插入项目,以便获得正确的值。

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

这应该显示

2. Nav
© www.soinside.com 2019 - 2024. All rights reserved.