Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
KORTE BESCHRIJVING
Hierin wordt uitgelegd hoe u Types.ps1xml-bestanden kunt gebruiken om de typen objecten uit te breiden die in PowerShell worden gebruikt.
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 Types.ps1xml-bestanden opnieuw worden geladen en uitgebreide gegevens worden gedefinieerd voor typen in de huidige sessie.
In dit onderwerp worden Types.ps1xml-bestanden beschreven. Zie Update-TypeDatavoor meer informatie over het gebruik van de 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 DateTime eigenschap toe aan alle System.DateTime objecten, zoals de objecten die door de Get-Date cmdlet worden geretourneerd.
PS C:> (Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM
U vindt de DateTime eigenschap niet in de beschrijving van de System.DateTime structuur, omdat PowerShell de eigenschap toevoegt en deze alleen zichtbaar is in Windows PowerShell.
Als u de DateTime eigenschap wilt toevoegen aan alle PowerShell-sessies, definieert Windows PowerShell de DateTime eigenschap in het bestand Types.ps1xml in de PowerShell-installatiemap ($PSHOME).
Uitgebreide typegegevens toevoegen aan PowerShell.
Er zijn drie bronnen van uitgebreide typegegevens in PowerShell-sessies.
De Types.ps1xml-bestanden in de PowerShell-installatiemap worden automatisch geladen in elke PowerShell-sessie.
De Types.ps1xml-bestanden die modules exporteren, worden geladen wanneer de module wordt geïmporteerd in de huidige sessie.
Uitgebreide typegegevens die zijn gedefinieerd met behulp van de
Update-TypeDatacmdlet, 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 TypeData-cmdlets zijn opgenomen in de module Microsoft.PowerShell.Utility in Windows PowerShell 3.0 en latere versies van Windows PowerShell en PowerShell Core.
-
Get-TypeData: verkrijgt uitgebreide typegegevens in de huidige sessie. -
Update-TypeData: Herlaadt Types.ps1xml-bestanden. Voegt uitgebreide typegegevens toe aan de huidige sessie. -
Remove-TypeData: verwijdert 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 bestand Types.ps1xml in de PowerShell-installatiemap ($PSHOME) is een op XML gebaseerd tekstbestand waarmee u eigenschappen en methoden kunt toevoegen aan de objecten die in PowerShell worden gebruikt. Windows PowerShell heeft ingebouwde Types.ps1xml-bestanden die verschillende elementen toevoegen aan de .NET Framework-typen, maar u kunt ook extra Types.ps1xml-bestanden maken om de typen verder uit te breiden.
Bijvoorbeeld, standaard hebben matrixobjecten (System.Array) een Length eigenschap die het aantal objecten in de matrix aangeeft. Omdat de naam 'Length' de eigenschap echter niet duidelijk beschrijft, voegt Windows PowerShell een aliaseigenschap met de naam 'Count' toe die dezelfde waarde weergeeft. Met de volgende XML wordt de eigenschap Count aan het System.Array type toegevoegd.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
Als u de nieuwe AliasPropertywilt ophalen, gebruikt u een Get-Member opdracht op een matrice, 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 of arrays in PowerShell gebruiken. Voorbeeld:
C:\PS> (1, 2, 3, 4).count
# 4
C:\PS> (1, 2, 3, 4).length
# 4
Nieuwe Types.ps1xml-bestanden maken
De .ps1xml-bestanden die met PowerShell zijn geïnstalleerd, 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 Framework-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, begint u met het kopiëren van een bestaand Types.ps1xml-bestand. Het nieuwe bestand kan elke naam hebben, maar het moet de bestandsnaamextensie .ps1xml hebben. U kunt het nieuwe bestand in elke map plaatsen die toegankelijk is voor PowerShell, maar het is handig om de bestanden in de Windows PowerShell-installatiemap ($PSHOME) of in een submap van de installatiemap te plaatsen.
Wanneer u het nieuwe bestand hebt opgeslagen, gebruikt u de cmdlet Update-TypeData om het nieuwe bestand toe te voegen aan uw PowerShell-sessie. Als u wilt dat uw typen voorrang hebben op de typen die zijn gedefinieerd in het ingebouwde bestand, 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 opdracht Update-TypeData 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 Framework-type in de betreffende PowerShell-sessie. Als u echter slechts eigenschappen of methoden wilt toevoegen aan één exemplaar van een object, gebruikt u de cmdlet Add-Member.
Zie Add-Membervoor meer informatie.
Voorbeeld: Een Age lid toevoegen aan FileInfo objecten
In dit voorbeeld ziet u hoe u een Age eigenschap toevoegt aan bestandsobjecten (System.IO.FileInfo). De leeftijd van een bestand is het verschil tussen de aanmaaktijd en de huidige tijd in dagen.
Het is het gemakkelijkst om het originele Types.ps1xml-bestand te gebruiken als sjabloon voor het nieuwe bestand. Met de volgende opdracht wordt het originele bestand gekopieerd naar een bestand met de naam MyTypes.ps1xml in de $PSHOME map.
Copy-Item Types.ps1xml MyTypes.ps1xml
Open vervolgens het bestand Types.ps1xml in een XML- of teksteditor, zoals Kladblok. Omdat de Age eigenschap wordt berekend met behulp van een scriptblok, zoekt u een <ScriptProperty> tag die u als model voor de nieuwe Age eigenschap kunt gebruiken.
Kopieer de XML tussen de <Type> en </Type> tags van de code om de scripteigenschap te maken. Verwijder vervolgens de rest van het bestand, met uitzondering van de openings <?xml> - en <Types> tags en de sluitingstag </Types> . U moet ook de digitale handtekening verwijderen om fouten te voorkomen.
Begin met de eigenschap van het modelscript, zoals de volgende scripteigenschap, die is gekopieerd uit het oorspronkelijke bestand Types.ps1xml.
<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>System.Guid</Name>
<Members>
<ScriptProperty>
<Name>Guid</Name>
<GetScriptBlock>$this.ToString()</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
</Types>
Wijzig vervolgens de naam van het .NET Framework-type, de naam van de eigenschap en de waarde van het scriptblok om een Age eigenschap voor bestandsobjecten te maken.
<?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>
Nadat u het bestand hebt opgeslagen en gesloten, voert u een Update-TypeData opdracht uit, zoals de volgende opdracht, om het nieuwe bestand Types.ps1xml toe te voegen aan de huidige sessie. De opdracht gebruikt de PrependData parameter om het nieuwe bestand in een hogere prioriteitsvolgorde te plaatsen dan het oorspronkelijke bestand. (Zie Update-TypeData voor meer informatie over.)
Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml
Als u de wijziging wilt testen, voert u een Get-ChildItem opdracht uit om het PowerShell.exe bestand op te halen in de $PSHOME map 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 Age eigenschap weergegeven in de lijst.
Get-ChildItem $PSHOME\PowerShell.exe | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
PSChildName : PowerShell.exe
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
Age : 16
VersionInfo : File: C:\WINDOWS\system32\WindowsPow...
InternalName: POWERSHELL
OriginalFilename: PowerShell.EXE
# ...
U kunt de Age eigenschap van het bestand ook weergeven met behulp van de volgende opdracht.
(Get-ChildItem $PSHOME\PowerShell.exe).Age
# 16
De XML in Types.ps1xml-bestanden
De <Types> tag plaatst alle typen die in het bestand zijn gedefinieerd.
Er mag maar één paar <Types> tags zijn.
Elk .NET Framework-type dat in het bestand wordt genoemd, moet worden weergegeven door een paar <Type> tags.
De typetags moeten de volgende tags bevatten:
<Name>: een paar codes die de naam van <Name> het betrokken .NET Framework-type omsluiten.
<Members>: een paar <Members> codes die de codes omsluiten voor de nieuwe eigenschappen en methoden die zijn gedefinieerd voor het .NET Framework-type.
Elk van de volgende lidtags kan zich in de <Members> tags bevinden.
<AliasProperty>: Definieert een nieuwe naam voor een bestaande eigenschap.
De <AliasProperty> tag moet een paar <Name> tags bevatten die de naam van de nieuwe eigenschap aangeven en een paar <ReferencedMemberName> codes die de bestaande eigenschap aangeven.
De Count aliaseigenschap is bijvoorbeeld een alias voor de Length eigenschap 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 Framework-klasse.
De <CodeMethod> tag moet een paar <Name> tags bevatten die de naam van de nieuwe methode aangeven en een paar <GetCodeReference> tags die de code aangeven waarin de methode is gedefinieerd.
De eigenschap Mode van mappen (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>
<CodeProperty>: Verwijst naar een statische methode van een .NET Framework-klasse.
De <CodeProperty> tag moet een paar <Name> tags bevatten die de naam van de nieuwe eigenschap opgeven en een paar <GetCodeReference> tags die de code specificeren waarin de eigenschap is gedefinieerd.
De Mode eigenschap van mappen (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>: Definieert een verzameling leden (eigenschappen en methoden).
De <MemberSet>-tags komen binnen de primaire <Members>-tags voor. De tags moeten een paar <Name> tags bevatten rond de naam van de ledenset en een paar secundaire <Members> tags die de leden (eigenschappen en methoden) in de set omringen. Alle tags die een eigenschap maken (zoals <NoteProperty> of <ScriptProperty>) of een methode (zoals <Method> of <ScriptMethod>) kunnen lid zijn van de set.
In Types.ps1xml-bestanden wordt de <MemberSet> tag gebruikt om de standaardweergaven van de .NET Framework-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. Het definieert een ledenset met de naam "PsStandardMembers" die bestaat uit een standaardeigenschapsset met de Status, Name, en DisplayName eigenschappen.
<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 paar <Name> tags bevatten die de naam van de nieuwe eigenschap aangeven en een paar <Value> codes die de waarde van de eigenschap aangeven.
Met de volgende XML wordt bijvoorbeeld de eigenschap Status gemaakt voor mappen (System.IO.DirectoryInfo objecten). De waarde van het Status onroerend goed is altijd "Succes".
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
<ParameterizedProperty>: Eigenschappen die argumenten gebruiken en een waarde teruggeven.
<Properties>: een verzameling eigenschappen van het object.
<Property>: een eigenschap van het basisobject.
<PropertySet>: Definieert een verzameling eigenschappen van het object.
De <PropertySet> tag moet een paar <Name> tags bevatten waarmee de naam van de eigenschappenset wordt opgegeven en een paar <ReferencedProperty> codes waarmee de eigenschappen worden opgegeven. De namen van de eigenschappen zijn ingesloten in <Name> tagparen.
In Types.ps1xml <PropertySet> worden codes gebruikt om sets eigenschappen te definiëren voor de standaardweergave van een object. U kunt de standaardweergaven herkennen aan de waarde "PsStandardMembers" in de <Name> tag van een <MemberSet> tag.
Met de volgende XML wordt bijvoorbeeld de eigenschap Status gemaakt voor mappen (System.IO.DirectoryInfo objecten). De waarde van het Status onroerend goed is altijd "Succes".
<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 paar <Name> tags bevatten die de naam van de nieuwe methode aangeven en een paar <Script> tags die het scriptblok omsluiten dat het methoderesultaat retourneert.
De methoden ConvertToDateTime en ConvertFromDateTime van beheerobjecten (System.System.Management.ManagementObject) zijn bijvoorbeeld 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 paar <Name> tags bevatten die de naam van de nieuwe eigenschap opgeven en een paar <GetScriptBlock> codes die het scriptblok omsluiten dat de eigenschapswaarde retourneert.
De eigenschap van bestanden (VersionInfoobjecten) is bijvoorbeeld System.IO.FileInfo een scripteigenschap die het resultaat is van het gebruik van de FullName eigenschap van de GetVersionInfo statische methode 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
Als u uw Types.ps1xml-bestanden wilt laden in een PowerShell-sessie, voert u de Update-TypeData cmdlet uit. Als u wilt dat de typen in uw bestand voorrang hebben op typen in het ingebouwde bestand Types.ps1xml, voegt u de parameter PrependData van Update-TypeDatatoe.
Update-TypeData is alleen van invloed op de huidige sessie. Als u de wijziging in alle toekomstige sessies wilt aanbrengen, exporteert u de sessie of voegt u de Update-TypeData opdracht toe aan uw Windows 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 Framework-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 Framework-eigenschappen.
Eigenschappen die worden toegevoegd door de cmdlet Update-TypeData uit te voeren, kunnen geen syntaxis van de methode gebruiken.
Een Types.ps1xml-bestand ondertekenen
Om gebruikers van uw Types.ps1xml-bestand te beschermen, kunt u het bestand ondertekenen met een digitale handtekening. Zie about_Signingvoor meer informatie.