我有一个数据字符串,我将其变成数组:
$cfg_data = @(
"AppName1,data1",
"AppName2,data2"
)
然后,我运行一个foreach查询以一次在每一行上工作:
FOREACH($a in $cfg_data)
{
$dataSplit = $a -split"(,)"
$AppN = $dataSplit[0]
$AppD = $dataSplit[2]
#Do stuff here
}
但我想将其从字符串转换为对象,以便添加/删除其他项,
然后再运行一些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.
正确的方法是什么?
最佳答案
通过在循环中声明$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
关于arrays - 从数组创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188254/