如何访问 Powershell PSCustomObject 属性?

How can I access Powershell PSCustomObject properties?

我正在通过 Powershell 脚本处理一些 API 结果处理。 API 数据 (json) 来自:

$tree = Invoke-WebRequest -Uri "xxxxxxxxmonURLxxxxxxxxxx/130333"  
$children = ($tree.Content | ConvertFrom-Json).data.12345.children

然后我使用 | ForEach 遍历 $children 对象 $_ 循环内的“147852”为 $_.Name,以下对象为 $_.Definition 我想解析 $_.Definition 中的对象,但不知道如何访问它。

Definition 对象如下所示:

  TypeName : System.Management.Automation.PSCustomObject
 
Name   MemberType   Definition
----   ----------   ----------
147852 NoteProperty System.Management.Automation.PSCustomObject 147852=@{nodeType=node; name=test1; flag=N0; creationDate=2022-02-17T14:50:16+00:00; hasAlerts=False; children=}

并且我希望访问 147852 键中的任何 属性(例如 nodeType、name、flag、...、children)。

$_.147852 输出一个错误说 147852 没有找到。

谢谢。

API json 返回:

{
    "data": {
        "130333": {
            "nodeType": "node",
            "name": "Test name",
            "flag": "N0",
            "children": {
                "147852": {
                    "nodeType": "node",
                    "name": "test1",
                    "flag": "N0",
                    "hasAlerts": false,
                    "children": {
                        "147853": {
                            "nodeType": "node",
                            "name": "test2",
                            "flag": "N0",
                            "children": {
                                "NP12-N9-S4": {
                                    "nodeType": "agent",
                                    "name": "Win10",
                                    "type": "S"
                                }
                            }
                        }
                }
            }
        }
    }
} 

Jeroen Mostert provided the crucial pointer in the comments, and Bender the Greatest links to what is effectively a ,但考虑到后者是 hashtable-focused,让我在 custom objects[=35] 的上下文中概括一下这个问题=] ([pscustomobject]):

不考虑意外使用 Get-Member,您的问题最终归结为 PowerShell 中的 解析器错误 ](参见 GitHub issue #14036):

为了避免这种情况,引用 属性 看起来像数字的名字 - 例如,要访问对象 $obj 上的 属性 147852,请使用 $obj.'147852'

严格来说,只有当您尝试 附加(嵌套)属性 访问时才会出现该错误:

# Nested sample custom object.
$obj = [pscustomobject] @{ 147852 = [pscustomobject] @{ name = 'test1' } }

# OK - number-like property is accessed without quoting, but *not nested*.
# However, $obj.'147852' is preferable.
$obj.147852

# *Nested* property access:

# !! BUG triggers error: "Missing property name after reference operator."
$obj.147852.name

# OK: Quoting avoids the problem.
$obj.'147852'.name # -> 'test1'