Freigeben über


Informationen zu systeminternen Membern

Kurzbeschreibung

Stellt Informationen zu den systeminternen Elementen von PowerShell bereit, die für alle PowerShell-Objekte verfügbar sind.

Detaillierte Beschreibung

Beim Erstellen von Objekten fügt PowerShell jedem Objekt einige „verborgene“ Eigenschaften und Methoden hinzu. Diese Eigenschaften und Methoden sind sogenannte systeminterne Member. Diese systeminternen Member sind in der Regel nicht sichtbar. Diese verborgenen Member können mit dem Parameter Force von Get-Member angezeigt werden.

Objektansichten

Die systeminternen Member umfassen eine Reihe von MemberSet-Eigenschaften, die eine Ansicht des Objekts darstellen. Weitere Informationen zu den MemberSet-Eigenschaften finden Sie unter PSMemberSet.

Jedes PowerShell-Objekt enthält die folgenden Eigenschaften.

  • psbase

    Das psbaseMemberSet enthält die Member des Basisobjekts ohne Erweiterung oder Anpassung. Je nach Objekttyp handelt es sich entweder um eine .NET-Instanz, die von einer [psobject] Instanz umbrochen wird, oder wenn kein Wrapper vorhanden ist, handelt es sich um das Eingabeobjekt selbst.

  • psadapted

    psadapted MemberSet zeigt das Basisobjekt sowie die angepassten Member an, sofern vorhanden. Angepasste Member werden vom Extended Type System (ETS) hinzugefügt.

  • psextended

    psextended MemberSetonly zeigt die Member an, die von den Dateien Types.ps1xml und dem Cmdlet Add-Member hinzugefügt wurden. Jedes Objekt kann zur Laufzeit mit dem Cmdlet Add-Member erweitert werden.

  • psobject

    psobject MemberSet ist eine umfassende Reflexionsquelle für alle Objekte, die Methoden, Eigenschaften und andere Informationen zum Objekt beinhalten.

Beispiele

In diesem Beispiel ist $hash eine Hashtabelle, die Informationen zu einem Benutzer enthält. Der Force-Parameter von Get-Member zeigt uns die systeminternen Komponenten des Objekts.

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

Die Verwendung von psobject ähnelt der Verwendung von Get-Member, bietet jedoch mehr Flexibilität. Sie können beispielsweise die Eigenschaften eines Objekts und deren Werte aufzählen.

$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

Vergleichen Sie dies mit dem Objekt, das durch die Umwandlung der Hashtabelle in ein PSCustomObjecterstellt wird.

$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name   MemberType Value
----   ---------- -----
Age  NoteProperty    33
Name NoteProperty   Bob

Beachten Sie, dass die Schlüssel aus der Hashtabelle in Eigenschaften im PSCustomObjectumgewandelt wurden. Die neuen Eigenschaften gehören nun zum 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…

Typinformationen

pstypenames CodeProperty listet die Objekttyphierarchie in der Reihenfolge der Vererbung auf. Zum Beispiel:

$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object

Die Ausgabe reicht vom spezifischsten Objekttyp, System.IO.FileInfo, bis zum allgemeinste Typ, System.Object.

Methodik

PowerShell fügt allen PowerShell-Objekten zwei verborgene Methoden hinzu. Diese Methoden werden mit dem Get-Member -Force-Befehl oder durch Vervollständigung mit der TAB-TASTE nicht sichtbar.

ForEach() und Where()

Die methoden ForEach() und Where() sind für alle PowerShell-Objekte verfügbar. Beim Arbeiten mit Sammlungen sind sie jedoch am nützlichsten. Weitere Informationen zur Verwendung dieser Methoden finden Sie unter about_Arrays.

Eigenschaften

Nicht alle skalare Typen besitzen die Eigenschaften Count oder Length im Basistyp. PowerShell fügt die fehlende Eigenschaft als systeminternen Member für alle skalaren Typen hinzu.

Anmerkung

Nicht initialisierte Variablen sind implizit $null. $null ist skalar und verfügt über systeminterne Eigenschaften Count und Length mit einem Wert 0.

Während die eigenschaften Count und Length ähnlich sind, funktionieren sie je nach Datentyp möglicherweise unterschiedlich. Beispielsweise entspricht die Length einer Zeichenfolge der Anzahl der Zeichen in der Zeichenfolge. Die Count-Eigenschaft gibt die Anzahl der Instanzen des Objekts an.

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

Weitere Informationen zu diesen Eigenschaften finden Sie im Artikel about_Properties.

Arrayindizierung skalarer Typen

Wenn ein Objekt keine indizierte Auflistung ist, wird bei Verwendung des Indexoperators für den Zugriff auf das erste Element das Objekt selbst zurückgegeben. Indexwerte, die über das erste Element hinausgehen, geben $nullzurück.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Weitere Informationen finden Sie unter about_Operators.

New() -Methode für Typen

Ab PowerShell 5.0 fügt PowerShell eine statische New()-Methode für alle .NET-Typen hinzu. In den folgenden Beispielen wird dasselbe Ergebnis erzeugt.

$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')

Die new()-Methode führt zu besseren Ergebnissen als New-Object.

Weitere Informationen finden Sie unter about_Classes.