about_Types.ps1xml
Korte beschrijving
Hierin wordt uitgelegd hoe u bestanden gebruikt Types.ps1xml
om de typen objecten uit te breiden die worden gebruikt in PowerShell.
Lange beschrijving
Uitgebreide typegegevens definiëren aanvullende eigenschappen en methoden ('leden') van objecttypen in PowerShell. Er zijn twee technieken voor het toevoegen van uitgebreide typegegevens aan een PowerShell-sessie.
Types.ps1xml
bestand: een XML-bestand dat uitgebreide typegegevens definieert.Update-TypeData
: Een cmdlet waarmee bestanden opnieuw worden geladenTypes.ps1xml
en uitgebreide gegevens worden gedefinieerd voor typen in de huidige sessie.
In dit onderwerp worden bestanden beschreven Types.ps1xml
. Zie Update-TypeData voor meer informatie over het gebruik van de Update-TypeData
cmdlet om dynamische uitgebreide typegegevens toe te voegen aan de huidige sessie.
Informatie over uitgebreide typegegevens
Uitgebreide typegegevens definiëren aanvullende eigenschappen en methoden ('leden') van objecttypen in PowerShell. U kunt elk type uitbreiden dat wordt ondersteund door PowerShell en de toegevoegde eigenschappen en methoden op dezelfde manier gebruiken als u de eigenschappen gebruikt die zijn gedefinieerd voor de objecttypen.
PowerShell voegt bijvoorbeeld een datum/tijd-eigenschap toe aan alle System.DateTime
objecten, zoals de objecten die door de Get-Date
cmdlet worden geretourneerd.
(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM
U vindt de eigenschap DateTime niet in de beschrijving van de structuur System.DateTime , omdat PowerShell de eigenschap toevoegt en deze alleen zichtbaar is in PowerShell.
PowerShell definieert intern een standaardset uitgebreide typen. Deze typegegevens worden tijdens het opstarten geladen in elke PowerShell-sessie. De eigenschap DateTime maakt deel uit van deze standaardset. Vóór PowerShell 6 werden de typedefinities opgeslagen Types.ps1xml
in de Installatiemap van PowerShell ($PSHOME
).
Uitgebreide typegegevens toevoegen aan PowerShell
Er zijn drie bronnen van uitgebreide typegegevens in PowerShell-sessies.
Uitgebreide typegegevens worden gedefinieerd door PowerShell en automatisch geladen in elke PowerShell-sessie. Vanaf PowerShell 6 wordt deze informatie gecompileerd in PowerShell en wordt deze niet meer verzonden in een
Types.ps1xml
bestand.De
Types.ps1xml
bestanden die modules exporteren, worden geladen wanneer de module wordt geïmporteerd in de huidige sessie.Uitgebreide typegegevens die worden gedefinieerd met behulp van de
Update-TypeData
cmdlet, worden alleen toegevoegd aan de huidige sessie. Het wordt niet opgeslagen in een bestand.
In de sessie worden de uitgebreide typegegevens van de drie bronnen op dezelfde manier toegepast op objecten en zijn ze beschikbaar voor alle objecten van de opgegeven typen.
De TypeData-cmdlets
De volgende cmdlets zijn opgenomen in de module Microsoft.PowerShell.Utility in PowerShell 3.0 en hoger.
Get-TypeData
: Hiermee worden uitgebreide typegegevens opgehaald in de huidige sessie.Update-TypeData
: laadtTypes.ps1xml
bestanden opnieuw. Voegt uitgebreide typegegevens toe aan de huidige sessie.Remove-TypeData
: Hiermee verwijdert u uitgebreide typegegevens uit de huidige sessie.
Zie het Help-onderwerp voor elke cmdlet voor meer informatie over deze cmdlets.
Ingebouwde Types.ps1xml-bestanden
De Types.ps1xml
bestanden in de $PSHOME
map worden automatisch aan elke sessie toegevoegd.
Het Types.ps1xml
bestand in de Installatiemap van PowerShell ($PSHOME
) is een xml-tekstbestand waarmee u eigenschappen en methoden kunt toevoegen aan de objecten die worden gebruikt in PowerShell. PowerShell bevat ingebouwde Types.ps1xml
bestanden die verschillende elementen toevoegen aan de .NET-typen, maar u kunt extra Types.ps1xml
bestanden maken om de typen verder uit te breiden.
Matrixobjecten (System.Array
) hebben bijvoorbeeld standaard een eigenschap Length waarmee het aantal objecten in de matrix wordt vermeld. Omdat de naam Length de eigenschap echter niet duidelijk beschrijft, voegt PowerShell een aliaseigenschap met de naam Count toe die dezelfde waarde weergeeft. Met de volgende XML wordt de eigenschap Count toegevoegd aan het System.Array
type.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
Als u de nieuwe AliasProperty wilt ophalen, gebruikt u een opdracht voor een Get-Member
matrix, zoals wordt weergegeven in het volgende voorbeeld.
Get-Member -InputObject (1,2,3,4)
De opdracht retourneert de volgende resultaten.
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
Address Method System.Object& Address(Int32)
Clone Method System.Object Clone()
CopyTo Method System.Void CopyTo(Array array, Int32 index):
Equals Method System.Boolean Equals(Object obj)
Get Method System.Object Get(Int32)
# ...
Als gevolg hiervan kunt u de eigenschap Count of de eigenschap Length van matrices in PowerShell gebruiken. Voorbeeld:
(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4
Nieuwe Types.ps1xml-bestanden maken
De .ps1xml
bestanden die zijn geïnstalleerd met PowerShell, worden digitaal ondertekend om manipulatie te voorkomen omdat de opmaak scriptblokken kan bevatten. Als u daarom een eigenschap of methode wilt toevoegen aan een .NET-type, maakt u uw eigen Types.ps1xml
bestanden en voegt u deze vervolgens toe aan uw PowerShell-sessie.
Als u een nieuw bestand wilt maken, kopieert u eerst een bestaand Types.ps1xml
bestand. Het nieuwe bestand kan elke naam hebben, maar het moet een .ps1xml
bestandsnaamextensie hebben. U kunt het nieuwe bestand in elke map plaatsen die toegankelijk is voor PowerShell, maar het is handig om de bestanden in de PowerShell-installatiemap ($PSHOME
) of in een submap van de installatiemap te plaatsen.
Wanneer u het nieuwe bestand hebt opgeslagen, gebruikt u de Update-TypeData
cmdlet om het nieuwe bestand toe te voegen aan uw PowerShell-sessie. Als u wilt dat uw typen voorrang hebben op de ingebouwde typen die zijn gedefinieerd, gebruikt u de parameter PrependData van de Update-TypeData
cmdlet. Update-TypeData
is alleen van invloed op de huidige sessie. Als u de wijziging wilt aanbrengen in alle toekomstige sessies, exporteert u de console of voegt u de Update-TypeData
opdracht toe aan uw PowerShell-profiel.
Types.ps1xml en Add-Member
De Types.ps1xml
bestanden voegen eigenschappen en methoden toe aan alle exemplaren van de objecten van het opgegeven .NET-type in de betreffende PowerShell-sessie. Als u echter alleen eigenschappen of methoden wilt toevoegen aan één exemplaar van een object, gebruikt u de Add-Member
cmdlet.
Zie Add-Member voor meer informatie.
Voorbeeld: Een leeftijdslid toevoegen aan FileInfo-objecten
In dit voorbeeld ziet u hoe u een eigenschap Age toevoegt aan System.IO.FileInfo-objecten . De leeftijd van een bestand is het verschil tussen de aanmaaktijd en de huidige tijd in dagen.
Omdat de eigenschap Leeftijd wordt berekend met behulp van een scriptblok, zoekt u een <ScriptProperty>
tag die moet worden gebruikt als een model voor de eigenschap New Age .
Sla de volgende XML-code op in het bestand $PSHOME\MyTypes.ps1xml
.
<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>Age</Name>
<GetScriptBlock>
((Get-Date) - ($this.CreationTime)).Days
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
</Types>
Voer Update-TypeData
uit om het nieuwe Types.ps1xml
bestand toe te voegen aan de huidige sessie. De opdracht gebruikt de parameter PrependData om het nieuwe bestand in een prioriteitsvolgorde te plaatsen die hoger is dan de oorspronkelijke definities.
Zie Update-TypeData voor meer informatie.Update-TypeData
Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml
Als u de wijziging wilt testen, voert u een Get-ChildItem
opdracht uit om het PowerShell.exe bestand in de $PSHOME
map op te halen en sluist u het bestand vervolgens door naar de Format-List
cmdlet om alle eigenschappen van het bestand weer te geven. Als gevolg van de wijziging wordt de eigenschap Leeftijd weergegeven in de lijst.
Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142
De XML in Types.ps1xml-bestanden
De volledige schemadefinitie vindt u in Types.xsd in de Opslagplaats voor PowerShell-broncode op GitHub.
De <Types>
tag plaatst alle typen die in het bestand zijn gedefinieerd. Er mag maar één <Types>
tag zijn.
Elk .NET-type dat in het bestand wordt vermeld, moet worden vertegenwoordigd door een <Type>
tag.
De typetags moeten de volgende tags bevatten:
<Name>
: plaatst de naam van het betreffende .NET-type.
<Members>
: plaatst de tags voor de nieuwe eigenschappen en methoden die zijn gedefinieerd voor het .NET-type.
Een van de volgende lidtags kan zich in de <Members>
tag bevinden.
AliasProperty
Hiermee definieert u een nieuwe naam voor een bestaande eigenschap.
De <AliasProperty>
tag moet een <Name>
tag hebben waarmee de naam van de nieuwe eigenschap wordt opgegeven en een <ReferencedMemberName>
tag waarmee de bestaande eigenschap wordt opgegeven.
De eigenschap Count alias is bijvoorbeeld een alias voor de eigenschap Length van matrixobjecten.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
CodeMethod
Verwijst naar een statische methode van een .NET-klasse.
De <CodeMethod>
tag moet een <Name>
tag hebben die de naam van de nieuwe methode aangeeft en een <CodeReference>
tag waarmee de code wordt opgegeven waarin de methode is gedefinieerd.
De Methode ToString is bijvoorbeeld de naam van de codedefinitie Microsoft.PowerShell.ToStringCodeMethods .
<Type>
<Name>System.Xml.XmlNode</Name>
<Members>
<CodeMethod>
<Name>ToString</Name>
<CodeReference>
<TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
<MethodName>XmlNode</MethodName>
</CodeReference>
</CodeMethod>
</Members>
</Type>
CodeProperty
Verwijst naar een statische methode van een .NET-klasse.
De <CodeProperty>
tag moet een <Name>
tag hebben waarmee de naam van de nieuwe eigenschap wordt opgegeven en een <GetCodeReference>
tag waarmee de code wordt opgegeven waarin de eigenschap is gedefinieerd.
De eigenschap Modus van System.IO.DirectoryInfo
objecten is bijvoorbeeld een code-eigenschap die is gedefinieerd in de PowerShell FileSystem-provider.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<CodeProperty>
<Name>Mode</Name>
<GetCodeReference>
<TypeName>
Microsoft.PowerShell.Commands.FileSystemProvider
</TypeName>
<MethodName>Mode</MethodName>
</GetCodeReference>
</CodeProperty>
</Members>
</Type>
MemberSet
Hiermee definieert u een verzameling leden (eigenschappen en methoden).
De <MemberSet>
tags worden weergegeven in de primaire <Members>
tags. De tags moeten een <Name>
tag plaatsen rond de naam van de ledenset en een secundaire <Members>
tag die de leden (eigenschappen en methoden) in de set omsluit. Alle tags die een eigenschap (zoals <NoteProperty>
of <ScriptProperty>
) of een methode (zoals <Method>
of <ScriptMethod>
) maken, kunnen lid zijn van de set.
In Types.ps1xml
bestanden wordt de <MemberSet>
tag gebruikt om de standaardweergaven van de .NET-objecten in PowerShell te definiëren. In dit geval is de naam van de ledenset (de waarde binnen de <Name>
tags) altijd PsStandardMembers en zijn de namen van de eigenschappen (de waarde van de <Name>
tag) een van de volgende:
DefaultDisplayProperty
: Één eigenschap van een object.DefaultDisplayPropertySet
: Een of meer eigenschappen van een object.DefaultKeyPropertySet
: een of meer belangrijke eigenschappen van een object. Een sleuteleigenschap identificeert exemplaren van eigenschapswaarden, zoals het id-aantal items in een sessiegeschiedenis.
De volgende XML definieert bijvoorbeeld de standaardweergave van services (System.ServiceProcess.ServiceController
objecten) die worden geretourneerd door de Get-Service
cmdlet. Hiermee definieert u een ledenset met de naam PsStandardMembers die bestaat uit een standaardeigenschap die is ingesteld met de eigenschappen Status, Name en DisplayName .
<Type>
<Name>System.ServiceProcess.ServiceController</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Status</Name>
<Name>Name</Name>
<Name>DisplayName</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
<Method>
: Verwijst naar een systeemeigen methode van het onderliggende object.
<Methods>
: Een verzameling van de methoden van het object.
NoteProperty
Definieert een eigenschap met een statische waarde.
De <NoteProperty>
tag moet een <Name>
tag hebben die de naam van de nieuwe eigenschap aangeeft en een <Value>
tag die de waarde van de eigenschap aangeeft.
Met de volgende XML wordt bijvoorbeeld een statuseigenschap gemaakt voor System.IO.DirectoryInfo-objecten . De waarde van de eigenschap Status is altijd geslaagd.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
PropertySet
Eigenschappen die argumenten aannemen en een waarde retourneren.
<Properties>
: Een verzameling eigenschappen van het object.
<Property>
: Een eigenschap van het basisobject.
<PropertySet>
: Hiermee definieert u een verzameling eigenschappen van het object.
De <PropertySet>
tag moet een <Name>
tag hebben waarmee de naam van de eigenschappenset wordt opgegeven en een <ReferencedProperty>
tag waarmee de eigenschappen worden opgegeven. De namen van de eigenschappen staan tussen <Name>
de tag.
<PropertySet>
Tags Types.ps1xml
worden gebruikt om sets eigenschappen te definiëren voor de standaardweergave van een object. U kunt de standaardweergave identificeren met de waarde PsStandardMembers in de <Name>
tag van een <MemberSet>
tag.
Met de volgende XML maakt u bijvoorbeeld een PropertySet met de naam DefaultDisplayPropertySet met drie ReferencedProperties.
<Type>
<Name>System.ServiceProcess.ServiceController</Name>
<Members>
<MemberSet>
<Name>PSStandardMembers</Name>
<Members>
<PropertySet>
<Name>DefaultDisplayPropertySet</Name>
<ReferencedProperties>
<Name>Status</Name>
<Name>Name</Name>
<Name>DisplayName</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
ScriptMethod
Definieert een methode waarvan de waarde de uitvoer van een script is.
De <ScriptMethod>
tag moet een <Name>
tag hebben die de naam van de nieuwe methode aangeeft en een <Script>
tag die het scriptblok omsluit dat het resultaat van de methode retourneert.
De en ConvertFromDateTime
methoden van beheerobjecten (System.System.Management.ManagementObject
) zijn bijvoorbeeld ConvertToDateTime
scriptmethoden die gebruikmaken van de ToDateTime
en ToDmtfDateTime
statische methoden van de System.Management.ManagementDateTimeConverter
klasse.
<Type>
<Name>System.Management.ManagementObject</Name>
<Members>
<ScriptMethod>
<Name>ConvertToDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
</Script>
</ScriptMethod>
<ScriptMethod>
<Name>ConvertFromDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
</Script>
</ScriptMethod>
</Members>
</Type>
ScriptProperty
Definieert een eigenschap waarvan de waarde de uitvoer van een script is.
De <ScriptProperty>
tag moet een <Name>
tag hebben die de naam van de nieuwe eigenschap aangeeft en een <GetScriptBlock>
tag die het scriptblok omsluit dat de eigenschapswaarde retourneert.
De eigenschap VersionInfo van het object System.IO.FileInfo is bijvoorbeeld een scripteigenschap die het resultaat is van het gebruik van de eigenschap FullName van de statische methode GetVersionInfo van system.Diagnostics.FileVersionInfo-objecten.
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>
<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
Zie de Windows PowerShell Software Development Kit (SDK) voor meer informatie.
Update-TypeData
Voer de Update-TypeData
cmdlet uit om uw Types.ps1xml
bestanden in een PowerShell-sessie te laden. Als u wilt dat de typen in uw bestand voorrang hebben op typen in het ingebouwde Types.ps1xml
bestand, voegt u de parameter PrependData van Update-TypeData
. Update-TypeData
is alleen van invloed op de huidige sessie. Als u de wijziging wilt aanbrengen in alle toekomstige sessies, exporteert u de sessie of voegt u de Update-TypeData
opdracht toe aan uw PowerShell-profiel.
Uitzonderingen die voorkomen in eigenschappen of van het toevoegen van eigenschappen aan een Update-TypeData
opdracht, melden geen fouten aan StdErr
. Dit is om uitzonderingen te onderdrukken die in veel algemene typen voorkomen tijdens het opmaken en uitvoeren. Als u .NET-eigenschappen krijgt, kunt u in plaats daarvan de onderdrukking van uitzonderingen omzeilen met behulp van de syntaxis van de methode, zoals wordt weergegeven in het volgende voorbeeld:
"hello".get_Length()
Houd er rekening mee dat de syntaxis van de methode alleen kan worden gebruikt met .NET-eigenschappen. Eigenschappen die worden toegevoegd door de cmdlet uit te voeren, kunnen geen syntaxis van de Update-TypeData
methode gebruiken.
Een Types.ps1xml-bestand ondertekenen
Als u gebruikers van uw Types.ps1xml
bestand wilt beveiligen, kunt u het bestand ondertekenen met behulp van een digitale handtekening. Zie about_Signing voor meer informatie.
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor