Powershell - 使用多维数组存储数据 - 需要建议

时间:2011-02-08 15:42:53

标签: powershell

我正在谷歌上搜索一段时间,但我找不到解决问题的方法。 我不得不说我是Powershell的新手。

我想创建以下数组 $ a =(A,B,C,D)其中 A = 1个字符串(总是) B = 1个字符串(总是) C =未定义的字符串数。我需要能够动态添加元素 D =未定义的字符串数。我需要能够动态添加元素(与C相同的数字)

这可能吗? 数组的2个元素的示例

  1. (“WSTM0123456”,“192.168.10.155”,(“WSTM8765421”,“WSTM9856454”,“WSTM1289765”),(“192.36.36.36”,“187.25.25.25”,“192.69.89.65”) )

  2. (“WLDN1251254”,“156.25.36.54”,(“WLDN1234512”,“WLDN9865323”),(“187.154.12.12”,“163.136.25.98”))

  3. 我不知道先前C和D中有多少个元素,我必须在C和D位附加一个for循环的字符串。

    范围:将相同字符串(A / B)下的多个字符串(C& D)组合在一起。

    任何帮助将不胜感激

    谢谢, 马可

2 个答案:

答案 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