【发布时间】:2022-10-04 18:09:05
【问题描述】:
PS中的对象相当新。
我正在尝试创建 pscustomobject,通过 ConvertFrom-JSON 将 JSON 内容添加到其中,然后尝试从另一个 JSON 获取内容以在其中一个属性(嵌套层次结构)上设置
$combinedObject=@()
$props = @{
ServiceDefinitions = @()
DataCenters = @()
}
$combinedObject = New-Object -TypeName PSCustomObject -Property $props
$servicedefinitions = Get-ChildItem -Path .\ServiceDefinitions\ | Select Name
$datacenters = Get-ChildItem -Path .\DataCenters\ | Select Name
$environments = @("Production")
$env="TEST"
Foreach ($datacenter in $datacenters)
{
$datacenterdata = $null
write-host "new run"
write-host $datacenter.Name
$datacentername = $datacenter.Name
$datacenterdata = Get-Content -Path .\DataCenters\$datacentername\config.json -Raw
$datacenterformatteddata = $datacenterdata | ConvertFrom-Json -Depth 5
$combinedObject.DataCenters += $datacenterformatteddata
$combinedObject.DataCenters.$datacentername
}
Foreach ($datacenter in $datacenters)
{
$pods = $null
$datacetnername = $null
$datacentername = $datacenter.Name
$pods = Get-ChildItem -Path .\DataCenters\$datacentername\$env\Pod\ | Select Name
Foreach ($pod in $pods)
{
$podname = $pod.Name
$poddata = Get-Content -Path .\DataCenters\$datacentername\$env\Pod\$podname\config.json -Raw
#echo $combinedObject.DataCenters
write-host $datacentername
$podformatteddata = $poddata | ConvertFrom-Json -Depth 5
$combinedObject.DataCenters.$datacentername.pods += $podformatteddata
}
}
对于我收到的每个循环迭代
The property 'pods' cannot be found on this object. Verify that the property exists and can be set.
我可以查询 pod 但无法设置它,它看起来是系统类型 System.Object[] 我是否需要以某种方式将其转换为 PSCustomObject 以便将下一个 JSON 文件的内容添加到其中?
【问题讨论】:
-
这个
$combinedObject.DataCenters.$datacentername有一个名为“pods”的属性吗? -
正确,当我调用它 $combinedObject.DataCenters.$datacentername 它的类型为 System.Object[] 时,我可以看到它
-
至少发布的代码是不可能的。变量
$combinedObject包含一个具有 2 个属性(ServiceDefinitions,DataCenters)的对象 - 就是这样......每个属性都是数组,您可以在其中填写数据......如果您执行 $combinedObject.DataCenters[0] 会发生什么.pods =“任何东西”? -
$combinedObject.DataCenters += $datacenterformatteddata 在 $combinedObject 下添加了一组值,这导致 $combinedObject.DataCenters.ExampleA.pods 在那里。
标签: json powershell pscustomobject