共用方式為


關於內在成員

簡短描述

提供有關所有 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-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 中的屬性,。 新的屬性現在是 psextendedMemberSet的一部分。

$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

Output 會以最特定的物件類型開始,System.IO.FileInfo,並持續到最泛型類型,System.Object

方法

PowerShell 會將兩個隱藏的方法新增至所有 PowerShell 物件。 這些方法無法使用 Get-Member -Force 命令或 Tab 鍵補全來看到。

ForEach() 和 Where()

所有 PowerShell 物件都可以使用 ForEach()Where() 方法。 不過,使用集合時,它們最有用。 如需如何使用這些方法的詳細資訊,請參閱 about_Arrays

性能

並非所有純量類型都有基底類型中 CountLength 屬性。 PowerShell 會將遺漏的屬性新增為所有純量類型的內建成員。

注意

未初始化的變數會被隱含地設為 $null$null 為純量,且具有固有的 CountLength 為 0。

雖然 CountLength 屬性很類似,但根據數據類型,它們的運作方式可能會有所不同。 例如,字串 長度 是字串中的字元數。 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