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 leden genoemd. Deze intrinsieke leden worden normaal gesproken verborgen. Deze verborgen leden kunnen worden weergegeven 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 PSMemberSet voor meer informatie over MemberSet-eigenschappen.

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 psextendedMemberSetworden alleen 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 Add-Member cmdlet.

  • psobject

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

Voorbeelden

In dit voorbeeld $hash is 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 psobject is vergelijkbaar met het gebruik 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 het 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

De pstypenamesCodeProperty vermeldt de objecttypehiërarchie in volgorde van overname. Voorbeeld:

$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 ForEach() en Where() methoden zijn beschikbaar voor alle PowerShell-objecten. Ze zijn echter het handigst bij het werken met verzamelingen. Zie about_Arrays voor meer informatie over het gebruik van deze methoden.

Eigenschappen

De eigenschappen Aantal en Lengte zijn beschikbaar voor alle PowerShell-objecten, niet alleen voor verzamelingen. Deze zijn vergelijkbaar met elkaar, maar werken 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_Properties voor meer informatie over deze eigenschappen.

Scalaire typen matrixindexering

Wanneer een object geen geïndexeerde verzameling is, retourneert het object zelf met behulp van de indexoperator om toegang te krijgen tot het eerste element. 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_Operators voor 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 new() methode presteert beter dan het gebruik van New-Object.

Zie about_Classes voor meer informatie.