Freigeben über


Über intrinsische Mitglieder

Kurzbeschreibung

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 "versteckte" Eigenschaften und Methoden hinzu. Diese Eigenschaften und Methoden werden als intrinsische Mitglieder bezeichnet. Diese intrinsischen Mitglieder sind normalerweise nicht sichtbar. Diese versteckten Mitglieder können mit dem Parameter Force von Get-Member angezeigt werden.

Objekt-Ansichten

Zu den intrinsischen Mitgliedern gehört eine Reihe von MemberSet-Eigenschaften, die eine Ansicht des Objekts darstellen. Weitere Informationen über MemberSet-Eigenschaften finden Sie unter PSMemberSet.

Jedes PowerShell-Objekt enthält die folgenden Eigenschaften.

  • psbase

    Das psbaseMemberSet enthält die Mitglieder 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 plus die angepassten Mitglieder, falls vorhanden. Angepasste Mitglieder werden durch das Extended Type System (ETS) hinzugefügt.

  • psextended

    Das psextendedMemberSet zeigt nur die Mitglieder an, die durch die Types.ps1xml-Dateien und das Add-Member-Cmdlet hinzugefügt wurden. Jedes Objekt kann zur Laufzeit mit dem Cmdlet Add-Member erweitert werden.

  • psobject

    Das psobjectMemberSet ist eine umfangreiche Quelle für Reflexionen für jedes Objekt, die Methoden, Eigenschaften und andere Informationen über das Objekt enthält.

Beispiele

In diesem Beispiel ist $hash eine Hashtabelle, die Informationen zu einem Benutzer enthält. Der Parameter Force von Get-Member zeigt uns die intrinsischen Mitglieder 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 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 das mit dem Objekt, das durch die Umwandlung 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 PSCustomObjectkonvertiert 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 Hierarchie der Objekttypen 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.FileInfo, und geht weiter bis zum am generischsten Typ, System.Object.

Methodik

PowerShell fügt allen PowerShell-Objekten zwei versteckte Methoden hinzu. Diese Methoden sind mit dem Befehl Get-Member -Force oder der Tabulatorvervollständigung 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 über die Verwendung dieser Methoden finden Sie unter about_Arrays.

Eigenschaften

Nicht alle Skalartypen haben Count- oder Length-Eigenschaften im Basistyp. PowerShell fügt die fehlende Eigenschaft als intrinsisches Mitglied für alle skalaren Typen hinzu.

Anmerkung

Uninitialisierte Variablen sind implizit $null. $null ist skalar und hat eine intrinsische Count-Eigenschaft und Length von 0.

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

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

Weitere Informationen über diese Eigenschaften finden Sie unter about_Properties.

Array-Indizierung skalarer Typen

Wenn ein Objekt nicht Teil einer indizierten Sammlung ist, bewirkt die Verwendung des Indexoperators für den Zugriff auf das erste Element, dass das Objekt selbst zurückgegeben wird. 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 Verwendung der Methode new() ist besser als die Verwendung von New-Object.

Weitere Informationen finden Sie unter about_Classes.