You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中为何$object.code与$object['code']访问属性结果不同?

PowerShell中对象属性点访问与索引访问的差异及动态属性访问说明

为什么Invoke-RestMethod返回对象会出现访问差异?

核心原因是Invoke-RestMethod默认把JSON响应转换成PSCustomObject,而非普通哈希表:

  • 多数编程语言里的哈希表/字典,object['key']和object.key都是直接的键值对查找,但PowerShell的PSCustomObject是基于.NET属性系统的对象:
    • .code是直接访问对象的.NET属性,这是PSObject的标准访问逻辑,所以能正常拿到值。
    • ['code']这种索引访问,PowerShell会尝试调用对象的索引器方法(只有实现IDictionary接口的对象才支持字符串索引),但PSCustomObject本身没有默认的字符串索引器,因此返回$null。

如果想要两种访问方式效果一致,调用Invoke-RestMethod时加上-AsHashTable参数即可,它会直接返回哈希表而非PSCustomObject:

$Object = Invoke-RestMethod -Uri "你的目标URL" -AsHashTable
$Object['code']  # 此时会返回200,和$Object.code效果完全一致

关于$Object.$property的写法

这是PowerShell的动态属性访问语法,$property是存储属性名字符串的变量,用这种写法可以动态指定要访问的属性。举个实际例子:

$propName = "code"
# 下面这行代码和直接写$Object.code完全等价
$Object.$propName

这种写法在需要根据运行时变量切换访问不同属性时特别实用,不用硬编码属性名,灵活性更高。

内容的提问来源于stack exchange,提问作者Doug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:27:17