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
相关产品推荐
相关产品推荐

