PowerShell中AliasProperty添加后显示与访问不一致的问题咨询
问题解析:动态AliasProperty的显示差异
两种场景的核心差异原因
字符串对象场景:
[string]是不可变类型,Add-Member无法直接修改原字符串对象,会自动创建一个PSObject包装器包裹原字符串,再把AliasProperty添加到这个包装器上。
执行$s | gm时,Get-Member识别的是PSObject的成员集合,其中包含动态添加的Length2,因此能正常显示。FileInfo/DirectoryInfo对象场景:
dir返回的是System.IO.FileInfo或DirectoryInfo类型的对象,这类属于可变引用类型,Add-Member会直接在对象实例上添加动态AliasProperty。
默认情况下,Get-Member仅展示对象基础.NET类型的固有成员,不会显示动态添加的实例级成员,所以看不到Length2;但PowerShell的成员访问机制会优先查找动态添加的成员,因此直接执行$s.Length2能正常返回值。
验证第二种场景的正确命令
如果要查看动态添加的AliasProperty,需要给Get-Member加上-Force参数:
$s = dir # 假设返回单个FileInfo/DirectoryInfo对象 $s = Add-Member -InputObject $s -MemberType AliasProperty -Name Length2 -Value Length -PassThru $s | gm -MemberType AliasProperty -Force # 此时能看到Length2属性 $s.Length2 # 正常返回对应值
内容的提问来源于stack exchange,提问作者Purclot
相关产品推荐
相关产品推荐

