从数组创建对象

时间:2014-11-28 12:03:23

标签: arrays object powershell powershell-v2.0

我有一串数据,我将其变成一个数组:

$cfg_data = @(
"AppName1,data1",
"AppName2,data2"    
) 

然后我运行一个foreach查询来一次处理每一行:

FOREACH($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

    #Do stuff here
}

但是我想将它从字符串转换为Object,所以我可以添加/删除其他项目, 然后再运行一些foreach语句,在我去的时候更新不同的位。

我到目前为止:

FOREACH($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

        $objHere = @(
            @{ 
                appItem = "$AppN";
                appData = "$AppD";
             }) 
}

但是当我检查$objHere时,它只有最后一个条目(AppName2,datat2)

我尝试添加:

$b=0

$objHere[$b]

然后我得到了

Array assignment failed because index '1' was out of range.

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

通过在循环中声明$objHere,可以覆盖每次迭代的值。您需要在循环外部初始化一个空数组,并在循环中追加它:

$objHere = @()

foreach($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

    $objHere += 
        @{ 
           appItem = "$AppN";
           appData = "$AppD";
         }
}

此外,您实际上并未创建对象,而是创建哈希表。如果你想创建一个对象,你可以这样做:

$objHere = @()

foreach($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]
    $objHere += New-Object PSObject -property @{appItem = "$AppN";appData = "$AppD";}
}

,并提供:

appItem  appData
-------  -------
AppName1 data1
AppName2 data2