Powershell ConvertTo-JSON отсутствует вложенный уровень

Похоже, Powershell отключает данные при экспорте в JSON, если он находится слишком глубоко. Мой объект hierchy выглядит следующим образом:

Main Object
    Metadata
    More Metadata
    Collection of Other object Sources
        Collection of data used by these sources

По какой-то причине, когда я конвертирую в JSON, powershell экспортирует третий уровень (сбор данных, используемых этими источниками) в виде пустой строки, даже если это массив объектов с различными добавленными к ним NoteProperties. Например:

$test = New-Object -TypeName PSObject

$obj = New-Object -TypeName PSObject
$obj | Add-Member -MemberType NoteProperty -Name "Name" -Value "adsf"

$test2 = New-Object -TypeName PSObject
$test2 | Add-Member -MemberType NoteProperty -Name "ArrayTest" -Value @($obj, $obj)

$test3 = New-Object -TypeName PSObject
$test3 | Add-Member -MemberType NoteProperty -Name "ArrayTest" -Value @($obj, $obj, $obj)

$test | Add-Member -MemberType NoteProperty -Name "CollectionTest" -Value @($test2, $test3)

В результате получается следующая строка JSON:

PS C:\Users\user\projects\Powershell> $test | ConvertTo-Json
{
    "CollectionTest":  [
                           {
                               "ArrayTest":  " "
                           },
                           {
                               "ArrayTest":  "  "
                           }
                       ]
}

Преобразование в XML приводит к аналогичной ситуации:

<?xml version="1.0"?>
<Objects>
  <Object Type="System.Management.Automation.PSCustomObject">
    <Property Name="CollectionTest" Type="System.Object[]">
      <Property Type="System.Management.Automation.PSCustomObject">
        <Property Type="System.String">@{ArrayTest=System.Object[]}</Property>
        <Property Name="ArrayTest" Type="System.Management.Automation.PSNoteProperty">System.Object[]</Property>
      </Property>
      <Property Type="System.Management.Automation.PSCustomObject">
        <Property Type="System.String">@{ArrayTest=System.Object[]}</Property>
        <Property Name="ArrayTest" Type="System.Management.Automation.PSNoteProperty">System.Object[]</Property>
      </Property>
    </Property>
  </Object>
</Objects>

Есть ли какое-то ограничение вложенности объектов в powershell?

Ответ 1

Из Get-Help ConvertTo-JSON:

-Depth < Int32 >
        Указывает, сколько уровней содержащихся объектов включено в представление JSON. Значение по умолчанию равно 2.

Задайте свой параметр -Depth любой глубиной, необходимой для сохранения ваших данных.