为何两种PowerShell场景中一种无法获取PSComputerName值?
问题原因解析
核心差异在于对象类型与属性绑定逻辑
- 直接返回
Get-PSDrive C时,得到的是PowerShell原生的PSDriveInfo对象。在远程执行场景(比如Invoke-Command)中,PowerShell会自动给这类原生对象附加PSComputerName等远程执行相关的扩展属性——这些属性是PowerShell扩展类型系统(ETS)专为原生对象提供的附加元数据。 - 用哈希表封装结果时,你是手动把
Used、Free等属性值提取出来存入了通用的键值对哈希表。哈希表属于基础的.NET集合类型,PowerShell不会为这类通用类型自动注入PSComputerName这类远程相关的扩展属性,所以最终返回的哈希表里就没有这个字段。
额外说明
PSComputerName并非对象本身的固有属性,而是PowerShell在远程执行场景中,通过ETS为原生对象动态添加的元数据。只有当返回的是PowerShell原生类型对象时,才会触发这个自动添加逻辑;自定义的哈希表不在这个逻辑的覆盖范围内。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

