關於內部成員
簡短描述
提供所有 PowerShell 物件可用之 PowerShell 內建成員的相關信息。
詳細描述
建立物件時,PowerShell 會將一些「隱藏」屬性和方法新增至每個物件。 這些屬性和方法稱為 內建成員。 這些內部成員通常會隱藏在檢視中。 您可以使用 Get-Member 的 Force 參數來查看這些隱藏成員。
對象檢視
內部成員包含一組代表對象檢視的 MemberSet 屬性。 如需 MemberSet 屬性的詳細資訊,請參閱 PSMemberSet。
每個 PowerShell 物件都包含下列屬性。
psbase
psbase
MemberSet 包含基底對象的成員,而不需要延伸或調整。 視物件類型而定,它是實例所[psobject]
包裝的 .NET 實例,如果沒有包裝函式,則為輸入物件本身。psadapted
如果存在,MemberSet
psadapted
會顯示基底物件加上已調整的成員。 已調整的成員是由擴充類型系統 (ETS) 新增。psextended
MemberSet
psextended
只會顯示 Types.ps1xml 檔案和 Add-Member Cmdlet 新增的成員。 任何物件都可以使用Add-Member
Cmdlet 在運行時間擴充。psobject
psobject
MemberSet 是包含方法、屬性及物件其他資訊之任何對象的豐富反映來源。
範例
在此範例中, $hash
是包含使用者相關信息的哈希表。
的 Force 參數 Get-Member
會顯示 物件的內建成員。
$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 中的屬性。 新的屬性現在是 MemberSet 的psextended
一部分。
$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
。
ForEach() 和 Where()
ForEach()
和 Where()
方法適用於所有 PowerShell 物件。
不過,使用集合時,它們最有用。 如需如何使用這些方法的詳細資訊,請參閱 about_Arrays。
屬性
Count 和 Length 屬性可供所有 PowerShell 物件使用,而不只是集合。 這些彼此類似,但可能會根據數據類型以不同的方式運作。 例如, 字串的 Length 是字串中的字元數。 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。