我有一串数据,我将其变成一个数组:
$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.
这样做的正确方法是什么?
答案 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