如何基于动态变量在Powershell中创建和填充数组?

时间:2015-01-30 18:15:14

标签: arrays powershell hashtable dynamic-arrays

我一直在努力解决这个问题,而且我不确定如何征服它。我需要做以下事情:

使用以下值导入csv用户:

ID,名称,地区

根据Region值创建一个数组,然后我可以用它来填充ID和名称与该区域,即。

Array_SEA

AA_SCOM,Adam Andrews,SEA

Array_OAK

BB_SCOM,Bob Barker,OAK

这是我现在的代码:

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU

$arraylist =@()

foreach ($vitem in $list2)
{
$arraylist += New-Object PsObject -Property @{'Array' = "Array_" + $vitem.bu}
}
foreach ($varray in $arraylist)
{
$arr = new-variable -Name $varray
$arr.value += $varray.array
$arr
}

这会对具有重复区域的记录产生以下错误: 新变量:名称为“@ {Array = Array_SCA}”的变量已存在。

我在尝试添加值时也会收到以下内容: 无法在此对象上找到属性“值”;确保它存在并且可以设置。

我知道我实际上并没有在第二部分创建数组,但我不知道如何将变量的输出传递给数组名而不将变量声明转换为数组名称,如果这是有意义的

我已经尝试了以下哈希表,并且它越来越近了:

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU

$arraylist =@{}

foreach ($vitem in $list2){$arraylist[$vitem.bu] = @()}

foreach ($record in $list2)
{
$arraylist[$vitem.bu] += ($record.SCOMID,$record.Name,$record.BU)
Write-host "Array: "
$arraylist[$vitem.bu]
write-host ""
}

这个输出显示没有错误,但它只是继续显示列表每次迭代的所有记录的添加字段,所以我不认为它实际上是将每个唯一的BU分配给数组名称。 / p>

1 个答案:

答案 0 :(得分:0)

我喜欢哈希表方法,但我会稍微调整一下。尝试:

$list2 = ipcsv .\TSE_Contact_List.csv | sort-object BU

$arraylist = @{}

foreach ($vitem in $list2){
    if($arraylist.ContainsKey($vitem.BU)) {
        #Array exists, add item
        $arraylist[($vitem.BU)] += $vitem
    } else {
        #Array not found, creating it
        $arraylist[($vitem.BU)] = @($vitem)    
    }
}

#TEST: List arrays and number of entries
$arraylist.GetEnumerator() | % {
    "Array '$($_.Key)' has $($_.Value.Count) items"
}

你也可以使用Group-Object之类的:

$list2 = ipcsv .\TSE_Contact_List.csv | Group-Object BU

#TEST: List groups(regions) and number of entries
$list2 | % {
    "Region '$($_.Name)' has $(@($_.Group).Count) items"
}