我想创建以下数组 $ a =(A,B,C,D)其中 A = 1个字符串(总是) B = 1个字符串(总是) C =未定义的字符串数。我需要能够动态添加元素 D =未定义的字符串数。我需要能够动态添加元素(与C相同的数字)
这可能吗? 数组的2个元素的示例
(“WSTM0123456”,“192.168.10.155”,(“WSTM8765421”,“WSTM9856454”,“WSTM1289765”),(“192.36.36.36”,“187.25.25.25”,“192.69.89.65”) )
(“WLDN1251254”,“156.25.36.54”,(“WLDN1234512”,“WLDN9865323”),(“187.154.12.12”,“163.136.25.98”))
我不知道先前C和D中有多少个元素,我必须在C和D位附加一个for循环的字符串。
范围:将相同字符串(A / B)下的多个字符串(C& D)组合在一起。
任何帮助将不胜感激
谢谢, 马可
答案 0 :(得分:3)
你可以这样做,但由于大量的隐式展平,因为在PowerShell中处理数组有时很麻烦,这可能会非常痛苦。
我建议为此创建一个自定义类型。然后你也可以给各个部分提供有用的名字(我不知道你在这里做什么的目的,所以我在这里编造名字。随意改变):
$properties = @{
Name = 'WSTM0123456';
IP = [ipaddress]'192.168.10.155';
ListOfNames = @("WSTM8765421","WSTM9856454","WSTM1289765");
ListOfIPs = [ipaddress[]]@("192.36.36.36", "187.25.25.25","192.69.89.65")
}
$foo = New-Object PSObject -Property @properties
然后您可以简单地追加新项目:
$foo.ListOfNames += 'AnotherName'
答案 1 :(得分:0)
我认为这几乎是一样的想法。使用哈希表,并生成两个元素数组。这就是你如何在运行时“动态”创建数组,而不知道任何内容将提前,取$ x并将任何以“t”开头的项目放在“C”中,以及所有内容否则在“D”中:
$a = @{A = "Some string";B = "Some other string"}
$x = "one","two","three","four","five"
$x |% {
if ($_ -match "^t"){$a["C"] += @($_)}
else {$a["D"] += @($_)}
}
$a.a
Some string
$a.b
Some other string
$a.c
two
three
$a.d
one
four
five
$obj = new-object psobject -property $a