Delen via


Over intrinsieke leden

Korte beschrijving

Bevat informatie over de intrinsieke leden van PowerShell die beschikbaar zijn voor alle PowerShell-objecten.

Gedetailleerde beschrijving

Wanneer objecten worden gemaakt, voegt PowerShell enkele verborgen eigenschappen en methoden toe aan elk object. Deze eigenschappen en methoden worden intrinsieke ledengenoemd. Deze intrinsieke leden worden normaal gesproken verborgen. Deze verborgen leden kunnen worden gezien met behulp van de parameter Force van Get-Member-.

Objectweergaven

De intrinsieke leden bevatten een set MemberSet eigenschappen die een weergave van het object vertegenwoordigen. Zie PSMemberSetvoor meer informatie over eigenschappen van MemberSet.

Elk PowerShell-object bevat de volgende eigenschappen.

  • psbase

    De psbaseMemberSet bevat de leden van het basisobject zonder uitbreiding of aanpassing. Afhankelijk van het objecttype is het een .NET-exemplaar dat is verpakt door een [psobject] exemplaar of, als er geen wrapper is, is dit het invoerobject zelf.

  • psadapted

    De psadaptedMemberSet toont het basisobject plus de aangepaste leden, indien aanwezig. Aangepaste leden worden toegevoegd door het Extended Type System (ETS).

  • psextended

    In de psextendedMemberSetalleen worden de leden weergegeven die zijn toegevoegd door de Types.ps1xml--bestanden en de cmdlet Add-Member. Elk object kan tijdens runtime worden uitgebreid met behulp van de cmdlet Add-Member.

  • psobject

    De psobjectMemberSet is een rijke bron van reflectie voor elk object dat methoden, eigenschappen en andere informatie over het object bevat.

Voorbeelden

In dit voorbeeld is $hash een hashtabel met informatie over een gebruiker. De parameter Force van Get-Member toont ons de intrinsieke leden van het object.

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

Het gebruik van psobject is vergelijkbaar met het gebruik van Get-Member, maar biedt meer flexibiliteit. U kunt bijvoorbeeld de eigenschappen van een object en de bijbehorende waarden opsommen.

$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

Vergelijk dit met het object dat is gemaakt door de hashtabel te converteren naar een PSCustomObject.

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

U ziet dat de sleutels van de hashtabel zijn geconverteerd naar eigenschappen in de PSCustomObject. De nieuwe eigenschappen maken nu deel uit van de 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…

Typegegevens

In de pstypenamesCodeProperty- wordt de objecttypehiërarchie weergegeven in volgorde van overname. Bijvoorbeeld:

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

De uitvoer begint met het meest specifieke objecttype, System.IO.FileInfoen gaat verder naar het meest algemene type, System.Object.

Methoden

PowerShell voegt twee verborgen methoden toe aan alle PowerShell-objecten. Deze methoden zijn niet zichtbaar met behulp van de Get-Member -Force opdracht of tabvoltooiing.

ForEach() en Where()

De methoden ForEach() en Where() zijn beschikbaar voor alle PowerShell-objecten. Ze zijn echter het handigst bij het werken met verzamelingen. Zie about_Arraysvoor meer informatie over het gebruik van deze methoden.

Eigenschappen

Niet alle scalaire typen hebben Count of Length eigenschappen in het basistype. PowerShell voegt de ontbrekende eigenschap toe als intrinsiek lid voor alle scalaire typen.

Notitie

Niet-geïnitialiseerde variabelen worden impliciet $null. $null is scalair en heeft een intrinsieke telling en lengte van 0.

Hoewel de eigenschappen Count en Length vergelijkbaar zijn, werken ze mogelijk anders, afhankelijk van het gegevenstype. De Lengte van een tekenreeks is bijvoorbeeld het aantal tekens in de tekenreeks. De eigenschap Count is het aantal exemplaren van het object.

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

Zie about_Propertiesvoor meer informatie over deze eigenschappen.

Indexering van schalier typen in arrays

Wanneer een object geen geïndexeerde verzameling is, resulteert het gebruik van de indexoperator om het eerste element te benaderen in het retourneren van het object zelf. Indexwaarden buiten het eerste element retourneren $null.

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

Zie about_Operatorsvoor meer informatie.

Methode New() voor typen

Vanaf PowerShell 5.0 voegt PowerShell een statische New() methode toe voor alle .NET-typen. De volgende voorbeelden produceren hetzelfde resultaat.

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

Het gebruik van de methode new() presteert beter dan het gebruik van New-Object.

Zie about_Classesvoor meer informatie.