gpt4 book ai didi

Powershell 变量不显示嵌套对象

转载 作者:行者123 更新时间:2023-12-03 14:37:52 25 4
gpt4 key购买 nike

我正在发送一个返回对象的 GET 请求。使用 postman ,我得到:

{
"changedInstance": {
"change": "Created",
"instanceAfterChange": {
"instanceId": "123",
"schemaName": "RBAC",
"className": "PermissionCategory",
"properties": {
"Name": "IModel Schema Management Service",
"TypeId": 2,
"TypeName": "Service Access and Permissions"
}
}
}}

但是当我通过 Powershell 发送请求时,我得到了响应:
@{change=Created; instanceAfterChange=}

我提出的要求:
$Response = Invoke-RestMethod -Uri $base_url/v2.4/Repositories/BentleyCONNECT--Main/RBAC/PermissionCategory -Method Post -Headers @{'Authorization' = 'Bearer ' + $global:token} -Body $postParams -ContentType "application/json"

我已经检查了所有标题值和正文,没有丢失任何值。

属性 'instanceAfterChange' 为空,但是当我在 fiddler 中监视相同的请求时,它显示了正确的响应。我的问题是,为什么 Powershell 将它显示为空,即使它不是。

最佳答案

ConvertFrom-Json构造一个 [pscustomobject]来自您的 JSON 输入的实例,您所看到的 ( @{change=Created; instanceAfterChange=} ) 是实例的 .changedInstance 的默认显示格式适当的值(value)。

由于 PowerShell 7.0 的错误,默认显示格式使其看起来好像属性 instanceAfterChange是空的,但实际上不是 .

  • 具体来说,错误是调用 .ToString()[pscustomobject]实例意外地产生空字符串 - 见 this GitHub issue .
  • [pscustomobject] 的类似哈希表的显示表示s 作为属性值 - 如您的问题所示并在 this answer 中解释- 涉及 .ToString()嵌套调用 [pscustomobject]实例,这就是错误浮出水面的原因。

  • 因此,访问嵌套的 [pscustomobject] 应该没有问题。 s 的属性,例如 $convertedFromJson.changedInstance.instanceAfterChange.schemaName应该产生 RBAC .

    验证数据是否存在的一种简单方法是转换回 JSON ( ConvertTo-Json ) 或通过 Format-Custom 可视化结构.

    一个简化的例子:
    $convertedFromJson = '{
    "changedInstance": {
    "instanceAfterChange": {
    "instanceId": "123",
    "schemaName": "RBAC"
    }
    }
    }
    ' | ConvertFrom-Json

    # Output as-is: the bug makes .changedInstance appear empty.
    $convertedFromJson

    '---'

    # Access a nested property - this works.
    $convertedFromJson.changedInstance.instanceAfterChange.schemaName

    '---'

    # Visualize the structure of the nested object.
    $convertedFromJson | Format-Custom

    以上产生:
    changedInstance
    ---------------
    @{instanceAfterChange=} # DISPLAY BUG: .instanceAfterChange appears empty.
    ---
    RBAC # OK: accessing a property of .instanceAfterChange works.
    ---

    # Visualization of the nested object's structure via Format-Custom
    class PSCustomObject
    {
    changedInstance =
    class PSCustomObject
    {
    instanceAfterChange =
    class PSCustomObject
    {
    instanceId = 123
    schemaName = RBAC
    }
    }
    }

    关于Powershell 变量不显示嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427516/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com