Informacje o elementach wewnętrznych
Krótki opis
Zawiera informacje o elementach wewnętrznych programu PowerShell, które są dostępne dla wszystkich obiektów programu PowerShell.
Szczegółowy opis
Po utworzeniu obiektów program PowerShell dodaje kilka "ukrytych" właściwości i metod do każdego obiektu. Te właściwości i metody są znane jako wewnętrzni członkowie. Te wewnętrzne elementy członkowskie są zwykle ukryte przed widokiem. Te ukryte elementy członkowskie można zobaczyć przy użyciu parametru ForceGet-Member.
Widoki obiektów
Wewnętrzni członkowie obejmują zestaw właściwości MemberSet, które reprezentują widok obiektu. Aby uzyskać więcej informacji na temat właściwości MemberSet, zobacz PSMemberSet.
Każdy obiekt programu PowerShell zawiera następujące właściwości.
psbase
Zestaw
psbase
MemberSet zawiera członków obiektu podstawowego bez rozszerzenia czy adaptacji. W zależności od typu obiektu jest to wystąpienie .NET opakowane przez instancję[psobject]
lub, jeśli nie ma opakowania, jest to sam obiekt wejściowy.psadapted
Zestaw
psadapted
MemberSet pokazuje obiekt podstawowy oraz zaadaptowanych członków, jeśli są obecni. Dostosowane elementy członkowskie są dodawane przez system rozszerzonego typu (ETS).psextended
Zestaw
psextended
MemberSettylko pokazuje elementy członkowskie dodane przez pliki Types.ps1xml oraz add-member polecenia cmdlet. Dowolny obiekt można rozszerzyć w czasie wykonywania przy użyciu polecenia cmdletAdd-Member
.psobject
psobject
MemberSet to bogate źródło refleksji dla dowolnego obiektu, zawierającego metody, właściwości i inne informacje o obiekcie.
Przykłady
W tym przykładzie $hash
jest tabelą skrótu zawierającą informacje o użytkowniku.
Parametr ForceGet-Member
pokazuje nam podstawowe składniki obiektu.
$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…
Użycie psobject
jest podobne do używania Get-Member
, ale zapewnia większą elastyczność. Można na przykład wyliczyć właściwości obiektu i ich wartości.
$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
Porównaj to z obiektem utworzonym przez przekonwertowanie tabeli skrótu na obiekt PSCustomObject.
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
Zwróć uwagę, że klucze z tabeli skrótu zostały przekonwertowane na właściwości w PSCustomObject. Nowe właściwości są teraz częścią 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…
Informacje o typie
pstypenames
CodeProperty wyświetla hierarchię typów obiektów w kolejności dziedziczenia. Na przykład:
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
Dane wyjściowe rozpoczynają się od najbardziej specyficznego typu obiektu, System.IO.FileInfo
, i przechodzą do najbardziej ogólnego typu, System.Object
.
Metody
Program PowerShell dodaje dwie ukryte metody do wszystkich obiektów programu PowerShell. Te metody nie są widoczne przy użyciu polecenia Get-Member -Force
lub uzupełniania tabulatorem.
ForEach() i Where()
Metody ForEach()
i Where()
są dostępne dla wszystkich obiektów programu PowerShell.
Są one jednak najbardziej przydatne podczas pracy z kolekcjami. Aby uzyskać więcej informacji na temat używania tych metod, zobacz about_Arrays.
Właściwości
Nie wszystkie typy skalarne mają właściwości Count lub Length w typie podstawowym. Program PowerShell dodaje brakującą właściwość jako element wewnętrzny dla wszystkich typów skalarnych.
Notatka
Niezainicjowane zmienne są niejawnie $null
.
$null
jest skalarna i ma wewnętrzną Count i Length 0.
Chociaż właściwości Count i Length są podobne, mogą działać inaczej w zależności od typu danych. Na przykład długość ciągu to liczba znaków w ciągu. Właściwość
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
Aby uzyskać więcej informacji na temat tych właściwości, zobacz about_Properties.
Typy skalarne indeksowania tablic
Gdy obiekt nie jest indeksowaną kolekcją, użycie operatora indeksu do uzyskania dostępu do pierwszego elementu zwraca sam obiekt. Wartości indeksu wykraczające poza pierwszy element zwracają $null
.
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
Aby uzyskać więcej informacji, zobacz about_Operators.
Metoda New() dla typów
Począwszy od programu PowerShell 5.0, program PowerShell dodaje statyczną metodę New()
dla wszystkich typów platformy .NET. W poniższych przykładach przedstawiono ten sam wynik.
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
Użycie metody new()
działa lepiej niż użycie New-Object
.
Aby uzyskać więcej informacji, zobacz about_Classes.