PowerShell 对象属性递归

PowerShell object properties recursive

我需要一个具有以下要求的函数:

函数被分配了一个未知对象。不知道该对象有多少属性和/或子对象。 然后函数递归遍历对象,直到它知道对象的所有属性。

PowerShell 然后应该像 JSON 文件一样输出它。但没有添加字符 ( { } [ ] , ).

我很确定 ConvertTo-Json cmdlet 具有这样的功能,但我不能自己编写/使用它。

请使用 cmdlet“Format-List”或类似的东西格式化整个内容,而不是手动使用制表符或空格。

这是一个小例子: 示例对象:

$Car = [PSCustomObject] @{
    Tire = [PSCustomObject] @{
        Color = "Black"
        Count = 4
    }
    
    Doors = [PSCustomObject]@{
        Color   = "Blue"
        Diameter = 21
    }
}

JSON 文件的输出:

{
    "Tire":  {
                 "Color":  "Black",
                 "Count":  4
             },
    "Doors":  {
                  "Color":  "Blue",
                  "Diameter":  21
              }
}

所需输出:

Tire: 
    Color:  Black
    Count:  4
Doors: 
    Color:      Blue
    Diameter:   21

输出应保存在字符串变量中。

我已经研究了好几天了,但找不到任何东西。

非常感谢。

您在上面寻找的输出似乎是(至少接近于)YAML 语法。您可以使用 'powershell-yaml' 模块以您需要的形式输出。

确保您已安装 'powershell-yaml' 模块 (Install-Module powershell-yaml),然后尝试执行以下操作:

命令

$Car = [PSCustomObject] @{
    Tire = [PSCustomObject] @{
        Color = "Black"
        Count = 4
    }
    
    Doors = [PSCustomObject]@{
        Color   = "Blue"
        Diameter = 21
    }
}

ConvertTo-Yaml $car

输出

Tire:
  Color: Black
  Count: 4
Doors:
  Color: Blue
  Diameter: 21

输出与您正在寻找的相同,ConvertTo-Yaml 应该适用于所有 PSObjects。