首页 > 解决方案 > PowerShell JSON 设置值

问题描述

伙计们,我确实在 PowerShell 中运行了一些 ReST api 调用并返回了一个

$response

page                                                content
----                                                -------
@{size=20; number=0; totalPages=1; totalElements=1} {@{id=ZGR2ZS0yLnZsYWIubG9j…

当我转换为 JSON

PS C:\Users\Administrator\Documents> $response | 转换为 JSON

{
  "page": {
    "size": 20,
    "number": 0,
    "totalPages": 1,
    "totalElements": 1
  },
  "content": [
    {
      "id": "ZGR2ZS0yLnZsYWIubG9jYWw6MzAwOTpob3N0",
      "host": "ddve-2.vlab.local",
      "port": "3009",
      "notValidBefore": "Fri Mar 29 21:32:19 PDT 2019",
      "notValidAfter": "Sat Mar 29 04:32:19 PDT 2025",
      "fingerprint": "E1BB40B0284595297071177FE02BC9C76E85CD66",
      "subjectName": "CN=ddve-2.vlab.local, O=Valued DataDomain customer, OU=Hos
t Certificate, ST=CA, C=US",
      "issuerName": "CN=ddve-2.vlab.local, OU=Root CA, O=Valued Datadomain Custo
mer, L=Santa Clara, ST=CA, C=US",
      "state": "ACCEPTED",
      "type": "HOST"
    }
  ]
}
an idividual value can be seen

PS C:\Users\Administrator\Documents> $response.content.state
ACCEPTED

但是设置新值失败

PS C:\Users\Administrator\Documents> $response.content.state = 123
InvalidOperation: The property 'state' cannot be found on this object. Verify th
at the property exists and can be set.

标签: jsonpowershell

解决方案


因为您的content属性是一个(单元素)数组(如其值包含在[ ... ]JSON 表示中所证明的那样),您必须使用索引来指定要设置.state的元素的属性:

$response.content[0].state = 123

请注意,获取不需要索引(即,如您所说,$response.content.stateworks 并返回"ACCEPTED"),因为 PowerShell 然后应用成员 enumeration,这意味着它枚举state数组的所有元素的属性值(使用单个-element 数组只返回单个元素的值,而多元素数组则返回一个值数组)。

设置属性值时,支持成员枚举的设计,尽管错误消息肯定会更有帮助 - 请参阅此答案


推荐阅读