Informationen zu systeminternen Mitgliedern

Kurze Beschreibung

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

Detaillierte Beschreibung

Wenn Objekte erstellt werden, fügt PowerShell jedem Objekt einige "ausgeblendete" Eigenschaften und Methoden hinzu. Diese Eigenschaften und Methoden werden als systeminterne Member bezeichnet. Diese systeminternen Member werden normalerweise aus der Ansicht ausgeblendet. Diese ausgeblendeten Member können mithilfe des Force-Parameters von Get-Member angezeigt werden.

Objektansichten

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

Jedes PowerShell-Objekt enthält die folgenden Eigenschaften.

  • psbase

    Das psbaseMemberSet enthält die Elemente 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

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

  • psextended

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

  • psobject

    Das psobjectMemberSet ist eine umfangreiche Quelle der Reflexion für jedes Objekt, das Methoden, Eigenschaften und andere Informationen zum Objekt enthält.

Beispiele

In diesem Beispiel handelt es sich um eine Hashtabelle mit $hash Informationen zu einem Benutzer. Der Parameter "ForceGet-Member" zeigt uns die systeminternen Elemente des Objekts an.

$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 ähnelt der Verwendung psobjectGet-Member, bietet aber 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 Konvertieren der Hashtabelle in ein PSCustomObject erstellt wurde.

$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 PSCustomObject konvertiert wurden. Die neuen Eigenschaften sind jetzt Teil des 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

Die pstypenamesCodeProperty 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 beginnt mit dem spezifischsten Objekttyp, System.IO.FileInfound setzt den generischsten Typ fort. System.Object

Methoden

PowerShell fügt allen PowerShell-Objekten zwei ausgeblendete Methoden hinzu. Diese Methoden werden nicht mithilfe des Befehls oder der Get-Member -Force Registerkartenabschluss angezeigt.

ForEach() und Where()

Die ForEach() Methoden und Where() Methoden 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

Die Eigenschaften "Anzahl " und "Länge " sind für alle PowerShell-Objekte verfügbar, nicht nur Fürsammlungen. Diese sind einander ähnlich, können aber je nach Datentyp unterschiedlich funktionieren. Beispielsweise ist die Länge einer Zeichenfolge die Anzahl der Zeichen in der Zeichenfolge. Die Count-Eigenschaft ist die Anzahl der Instanzen des Objekts.

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

Weitere Informationen zu diesen Eigenschaften finden Sie unter about_Properties.

Arrayindizierung skalarer Typen

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

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 Verwendung der new() Methode führt besser aus als die Verwendung New-Object.

Weitere Informationen finden Sie unter about_Classes.