【问题标题】:Adding JSON content to PSCustomObject - The property cannot be found on this object将 JSON 内容添加到 PSCustomObject - 在此对象上找不到该属性
【发布时间】: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


【解决方案1】:

通过更改 JSON 从 豆荚:[] 到

podlist:{ pods:[]} 

和参考

  $combinedObject.DataCenters.$datacentername.podlist.pods

设置值。

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2018-07-27
    • 2015-09-01
    • 2021-10-22
    • 1970-01-01
    • 2020-05-04
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多