添加别名属性(AliasProperty 成员)

问题描述 投票:0回答:1

我只是想知道为什么会这样:

$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

工作得很好吗?

powershell properties alias
1个回答
0
投票

$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
实例。

© www.soinside.com 2019 - 2024. All rights reserved.