我只是想知道为什么会这样:
$s = "hi there"
$s = Add-Member -InputObject $s -MemberType AliasProperty -Name Length2 -Value Length -PassThru
$s | gm -MemberType AliasProperty #the property is there
$s.Length2 #8
意味着:别名属性 Length2 存在,但这不起作用:
$s = dir
$s = Add-Member -InputObject $s -MemberType AliasProperty -Name Length2 -Value Length -PassThru
$s | gm -MemberType AliasProperty #the property is not there
意味着:没有别名属性 Length2,但令人惊讶的是:
$s.Length2 #458
工作得很好吗?
$s = dir
鉴于
dir
是Get-ChildItem
的内置别名,这通常会导致数组存储在$s
中,即每当存在两个或更多子项(文件或子目录)时.[1]
$s = Add-Member -InputObject $s ...
Add-Member
的 -InputObject
参数,您将别名属性添加到 数组本身。
$s | gm -MemberType AliasProperty
相比之下,由于这里使用管道,其中枚举数组,因此将存储在$s
中的数组的
元素发送到
Get-Member
(其内置别名是gm
) - 这些确实没有有你的别名属性。
$s.Length2 #458
在这里,您直接在数组上访问别名属性,因此这是有效的。
[1] 具体来说,它是一个
[object[]]
数组,包含 System.IO.FileInfo
和/或 System.IO.DirectoryInfo
实例。