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
psbase
MemberSet 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
psadapted
MemberSet toont het basisobject plus de aangepaste leden, indien aanwezig. Aangepaste leden worden toegevoegd door het Extended Type System (ETS).psextended
In de
psextended
MemberSetalleen 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 cmdletAdd-Member
.psobject
De
psobject
MemberSet 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 psextended
MemberSet.
$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 pstypenames
CodeProperty- 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.FileInfo
en 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.