关于固有成员
简短说明
提供有关对所有 PowerShell 对象可用的 PowerShell 固有成员的信息。
详细说明
创建对象时,PowerShell 会将一些“隐藏”属性和方法添加到每个对象。 这些属性和方法称为固有成员。 这些固有成员通常隐藏在视图中。 可以使用 Get-Member 的 Force 参数查看这些隐藏成员。
对象视图
内部成员包括一组 MemberSet 属性,这些属性表示对象的视图。 有关 MemberSet 属性的详细信息,请参阅 PSMemberSet。
每个 PowerShell 对象都包含以下属性。
psbase
psbase
MemberSet 包含基本对象的成员,无需扩展或适应。 根据对象类型,它是由[psobject]
实例包装的 .NET 实例,或者如果没有包装器,则它是输入对象本身。psadapted
psadapted
MemberSet 显示基础对象以及改编成员(如果存在)。 扩展类型系统 (ETS) 添加了适配成员。psextended
psextended
MemberSet仅显示 Types.ps1xml 文件和 Add-Member cmdlet 添加的成员。 可以使用Add-Member
cmdlet 在运行时扩展任何对象。psobject
psobject
MemberSet 是任何对象的包含方法、属性和有关该对象的其他信息的丰富反射源。
例子
在此示例中,$hash
是包含有关用户的信息的哈希表。
Get-Member
的 Force 参数显示对象的固有成员。
$hash = @{
Age = 33
Name = 'Bob'
}
$hash | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase MemberSet psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended MemberSet psextended {}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
使用 psobject
类似于使用 Get-Member
,但提供了更大的灵活性。 例如,可以枚举对象的属性及其值。
$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
IsReadOnly Property False
IsFixedSize Property False
IsSynchronized Property False
Keys Property {Age, Name}
Values Property {33, Bob}
SyncRoot Property {[Age, 33], [Name, Bob]}
Count Property 2
将该对象与通过将哈希表转换为 PSCustomObject创建的对象进行比较。
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
请注意,哈希表中的键已转换为 PSCustomObject中的属性。 新属性现在是 psextended
MemberSet 的一部分。
$user | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {ToString, GetType, Equals, GetHashCode}
psbase MemberSet psbase {ToString, GetType, Equals, GetHashCode}
psextended MemberSet psextended {Age, Name}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
类型信息
pstypenames
CodeProperty 按继承顺序列出对象类型层次结构。 例如:
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
输出从最具体的对象类型开始,System.IO.FileInfo
,并持续到最泛型类型,System.Object
。
方法
PowerShell 向所有 PowerShell 对象添加两个隐藏的方法。 这些方法无法通过 Get-Member -Force
命令或 Tab 补全来显现。
ForEach() 和 Where()
ForEach()
和 Where()
方法适用于所有 PowerShell 对象。
但是,在使用集合时,它们最有用。 有关如何使用这些方法的详细信息,请参阅 about_Arrays。
性能
并非所有标量类型在基类型中具有 Count 或 Length 属性。 PowerShell 将缺少的属性添加为所有标量类型的固有成员。
注意
未初始化的变量隐式为 $null
。 $null
是标量,其内部 Count 和 Length 为 0。
虽然 计数 和 长度 属性相似,但它们的工作方式可能有所不同,具体取决于数据类型。 例如,字符串的 长度 是字符串中的字符数。 Count 属性是对象的实例数。
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
有关这些属性的详细信息,请参阅 about_Properties。
数组索引标量类型
当对象不是索引集合时,使用索引运算符访问第一个元素将返回对象本身。 超出第一个元素的索引值会返回 $null
。
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
有关详细信息,请参阅 about_Operators。
类型的 New() 方法
从 PowerShell 5.0 开始,PowerShell 为所有 .NET 类型添加静态 New()
方法。 以下示例生成相同的结果。
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
使用 new()
方法的性能优于使用 New-Object
。
有关详细信息,请参阅 about_Classes。