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ą nazywane elementami członkowskimi wewnętrznymi. Te wewnętrzne elementy członkowskie są zwykle ukryte przed widokiem. Te ukryte elementy członkowskie można zobaczyć przy użyciu parametru Force elementu Get-Member.
Widoki obiektów
Wewnętrzne elementy członkowskie zawierają zestaw właściwości MemberSet , które reprezentują widok obiektu. Aby uzyskać więcej informacji na temat właściwości zestawu elementów członkowskich , zobacz PSMemberSet.
Każdy obiekt programu PowerShell zawiera następujące właściwości.
psbase
Element
psbase
MemberSet zawiera elementy członkowskie obiektu podstawowego bez rozszerzenia lub adaptacji. W zależności od typu obiektu jest to wystąpienie platformy .NET opakowane przez[psobject]
wystąpienie lub, jeśli nie ma otoki, jest to sam obiekt wejściowy.psadapted
Zestaw
psadapted
elementów członkowskich pokazuje obiekt podstawowy oraz dostosowane elementy członkowskie, jeśli są obecne. Dostosowane elementy członkowskie są dodawane przez system rozszerzonego typu (ETS).psextended
W elemencie MemberSet są wyświetlane tylko elementy członkowskie dodane przez pliki Types.ps1xml i polecenie cmdlet Add-Member.
psextended
Dowolny obiekt można rozszerzyć w czasie wykonywania przy użyciuAdd-Member
polecenia cmdlet .psobject
Element
psobject
MemberSet bogate źródło odbicia dla dowolnego obiektu, który zawiera metody, właściwości i inne informacje o obiekcie.
Przykłady
W tym przykładzie $hash
jest to tabela skrótu zawierająca informacje o użytkowniku.
Parametr Force obiektu Get-Member
pokazuje nam wewnętrzne elementy członkowskie 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 elementu 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 obiekcie PSCustomObject. Nowe właściwości są teraz częścią elementu 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
Właściwość 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 zaczynają się od najbardziej określonego typu obiektu , System.IO.FileInfo
i kontynuuje działanie 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 lub ukończenia Get-Member -Force
karty.
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
Właściwości Count i Length są dostępne dla wszystkich obiektów programu PowerShell, a nie tylko kolekcji. Są one podobne do siebie, ale mogą działać inaczej w zależności od typu danych. Na przykład długość ciągu jest liczbą znaków w ciągu. Właściwość Count jest liczbą wystąpień obiektu.
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
Jeśli obiekt nie jest indeksowaną kolekcją, użyj operatora indeksu, aby uzyskać dostęp do pierwszego elementu, zwraca sam obiekt. Wartości indeksu wykraczające poza pierwszy element zwracają wartość $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 metodę statyczną 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')
new()
Użycie metody działa lepiej niż przy użyciu metody New-Object
.
Aby uzyskać więcej informacji, zobacz about_Classes.