当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] about_Intrinsic_Members

作者:精品下载站 日期:2024-12-14 02:22:08 浏览:15 分类:玩电脑

about_Intrinsic_Members


简短描述

提供有关可用于所有 PowerShell 对象的 PowerShell 内部成员的信息。

详细说明

创建对象时,PowerShell 会向每个对象添加一些“隐藏”属性和方法。这些属性和方法称为内在成员。这些内在成员通常是隐藏的。可以使用 Get-Member 的 Force 参数查看这些隐藏成员。

对象视图

内部成员包括一组表示对象视图的 MemberSet 属性。有关 MemberSet 属性的详细信息,请参阅 PSMemberSet。

每个 PowerShell 对象都包含以下属性。

  • psbase

    psbase MemberSet 包含基础对象的成员,无需扩展或改编。根据对象类型,它可以是由 [psobject] 实例包装的 .NET 实例,或者如果没有包装器,则它是输入对象本身。

  • psadapted

    psadapted MemberSet 显示基础对象以及经过调整的成员(如果存在)。适配成员由扩展类型系统 (ETS) 添加。

  • ps扩展

    psextended MemberSet 显示由 Types.ps1xml 文件和 Add-Member cmdlet 添加的成员。任何对象都可以在运行时使用 Add-Member cmdlet 进行扩展。

  • psobject

    psobject MemberSet 是任何对象的丰富反射源,其中包括有关该对象的方法、属性和其他信息。

示例

对于此示例,$hash 是包含有关用户信息的哈希表。 Get-MemberForce 参数向我们展示了对象的内在成员。

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

特性

CountLength 属性适用于所有 PowerShell 对象,而不仅仅是集合。它们彼此相似,但根据数据类型的不同,其工作方式可能有所不同。例如,字符串的长度是字符串中的字符数。 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。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯