about_Types.ps1xml

Korte beschrijving

Legt uit hoe u bestanden gebruikt om de typen objecten uit te Types.ps1xml 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 die bestanden opnieuw laadt en uitgebreide gegevens Types.ps1xml definieert voor typen in de huidige sessie.

In dit onderwerp worden bestanden Types.ps1xml beschreven. Zie Update-TypeData voor meer informatie over het gebruik van de cmdlet om dynamische uitgebreide typegegevens toe te voegen aan de Update-TypeData huidigesessie.

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 de eigenschappen die zijn gedefinieerd voor de objecttypen.

PowerShell voegt bijvoorbeeld een eigenschap DateTime toe aan alle objecten, zoals de objecten die de System.DateTime Get-Date cmdlet retourneert.

(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 bij het opstarten in elke PowerShell-sessie geladen. De eigenschap DateTime maakt deel uit van deze standaardset. Vóór PowerShell 6 werden de typedefinities opgeslagen in de Types.ps1xml PowerShell-installatiemap ( $PSHOME ).

Uitgebreide gegevens van het type toevoegen aan PowerShell

Er zijn drie bronnen van uitgebreide gegevens in PowerShell-sessies.

  • Uitgebreide typegegevens worden gedefinieerd door PowerShell en automatisch in elke PowerShell-sessie geladen. 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 type gegevens die is gedefinieerd met behulp van Update-TypeData de cmdlet wordt alleen toegevoegd aan de huidige sessie. Het wordt niet opgeslagen in een bestand.

In de sessie worden de uitgebreide typegegevens uit 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: haalt uitgebreide typegegevens op in de huidige sessie.
  • Update-TypeData: bestanden opnieuw Types.ps1xml laden. Uitgebreide typegegevens toegevoegd aan de huidige sessie.
  • Remove-TypeData: hiermee verwijdert u uitgebreide type gegevens uit de huidige sessie.

Zie het Help-onderwerp voor elke cmdlet voor meer informatie over deze cmdlets.

Ingebouwde xmlTypes.ps1bestanden

De Types.ps1xml bestanden in de map worden automatisch toegevoegd aan elke $PSHOME sessie.

Het bestand in de PowerShell-installatiemap ( ) is een op XML gebaseerd tekstbestand waarmee u eigenschappen en methoden kunt toevoegen aan de objecten die worden gebruikt Types.ps1xml $PSHOME in PowerShell. PowerShell heeft ingebouwde bestanden die verschillende elementen toevoegen aan de .NET-typen, maar u kunt aanvullende bestanden maken om de Types.ps1xml typen verder uit te Types.ps1xml breiden.

Matrixobjecten ( ) hebben bijvoorbeeld standaard de eigenschap Length waarin het System.Array aantal objecten in de matrix wordt vermeld. Omdat de naam Length de eigenschap niet duidelijk beschrijft, voegt PowerShell echter een alias-eigenschap toe met de naam Count die dezelfde waarde werekent. 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 op halen, gebruikt u een Get-Member opdracht in een 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. Bijvoorbeeld:

(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4

Nieuwe XMLTypes.ps1bestanden maken

De bestanden die zijn geïnstalleerd met PowerShell, zijn digitaal ondertekend om manipulatie te voorkomen, omdat de .ps1xml opmaak scriptblokken kan bevatten. Als u daarom een eigenschap of methode wilt toevoegen aan een .NET-type, maakt u uw eigen bestanden en voegt u deze Types.ps1xml 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 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 ( ) of in een submap van de installatiemap te $PSHOME plaatsen.

Wanneer u het nieuwe bestand hebt opgeslagen, gebruikt u de cmdlet om het nieuwe bestand toe Update-TypeData 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 alle toekomstige sessies wilt wijzigen, exporteert u de -console of voegt u de Update-TypeData opdracht toe aan uw PowerShell-profiel.

Types.ps1xml en Add-Member

De bestanden voegen eigenschappen en methoden toe aan alle exemplaren van de objecten van het opgegeven Types.ps1xml .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 Age-lid 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 Age wordt berekend met behulp van een scriptblok, moet u een tag zoeken die moet worden gebruikt als model voor de <ScriptProperty> nieuwe eigenschap 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 bestand toe te voegen aan de huidige Types.ps1xml sessie. De opdracht gebruikt de parameter PrependData om het nieuwe bestand in een hogere volgorde te plaatsen dan de oorspronkelijke definities.

Zie Update-TypeData Update-TypeData voor meer informatie over.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Als u de wijziging wilt testen, moet u een opdracht uitvoeren om het PowerShell.exe-bestand op te halen in de map en het bestand vervolgens doorspijpen naar de cmdlet om alle eigenschappen van het bestand weer Get-ChildItem $PSHOME te Format-List geven. Als gevolg van de wijziging wordt de eigenschap Age in de lijst weergegeven.

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 tag sluit alle typen in <Types> die in het bestand zijn gedefinieerd. Er mag slechts éé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>: Sluit de naam van het betrokken .NET-type in.

<Members>: Sluit de tags in voor de nieuwe eigenschappen en methoden die zijn gedefinieerd voor het .NET-type.

Elk van de volgende lidtags kan zich in de <Members> tag .

AliasProperty

Hiermee definieert u een nieuwe naam voor een bestaande eigenschap.

De tag moet een tag hebben die de naam van de nieuwe eigenschap specificeert en een <AliasProperty> tag die de bestaande eigenschap <Name> <ReferencedMemberName> specificeert.

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 tag moet een tag hebben waarmee de naam van de nieuwe methode wordt opgegeven en een tag die de code specificeert <CodeMethod> waarin de methode is <Name> <CodeReference> 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 tag moet een tag hebben die de naam van de nieuwe eigenschap specificeert en een tag die de code specificeert <CodeProperty> waarin de eigenschap is <Name> <GetCodeReference> gedefinieerd.

De eigenschap Mode van objecten is bijvoorbeeld een System.IO.DirectoryInfo 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>

Ledenset

Definieert een verzameling leden (eigenschappen en methoden).

De <MemberSet> tags worden weergegeven binnen de primaire <Members> tags. De tags moeten een tag rond de naam van de ledenset en een secundaire tag rond de leden (eigenschappen en <Name> <Members> methoden) in de set zetten. Alle tags die een eigenschap maken (zoals of ) of een methode <NoteProperty> <ScriptProperty> (zoals <Method> of ) kunnen lid zijn van de <ScriptMethod> set.

In bestanden wordt de tag gebruikt om de standaardweergaven van de Types.ps1xml <MemberSet> .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 tag) een van <Name> de volgende:

  • DefaultDisplayProperty: Een enkele eigenschap van een object.

  • DefaultDisplayPropertySet: Een of meer eigenschappen van een object.

  • DefaultKeyPropertySet: Een of meer sleuteleigenschappen van een object. Een sleutel-eigenschap 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 standaardeigenschappenset met de eigenschappen Status, Naam 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 native methode van het onderliggende object.

<Methods>: Een verzameling van de methoden van het -object.

NoteProperty

Definieert een eigenschap met een statische waarde.

De tag moet een tag hebben die de naam van de nieuwe eigenschap specificeert en een <NoteProperty> tag die de waarde van de eigenschap <Name> <Value> specificeert.

Met de volgende XML wordt bijvoorbeeld een eigenschap Status 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 nemen en een waarde retourneren.

<Properties>: Een verzameling van de eigenschappen van het -object.

<Property>: Een eigenschap van het basisobject.

<PropertySet>: Hiermee definieert u een verzameling eigenschappen van het -object.

De tag moet een tag hebben die de naam van de eigenschappenset specificeert en een <PropertySet> tag die de eigenschappen <Name> <ReferencedProperty> specificeert. De namen van de eigenschappen worden ingesloten in <Name> de tag .

In Types.ps1xml worden tags gebruikt voor het definiëren van sets eigenschappen voor de <PropertySet> standaardweergave van een object. U kunt de standaardweergaven 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 tag moet een tag hebben waarmee de naam van de nieuwe methode wordt opgegeven en een tag die het scriptblok omsluit dat het resultaat van <ScriptMethod> <Name> de methode <Script> retourneert.

De methoden en van ConvertToDateTime ConvertFromDateTime beheerobjecten ( ) zijn bijvoorbeeld scriptmethoden die System.System.Management.ManagementObject gebruikmaken van de ToDateTime statische methoden en ToDmtfDateTime 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 tag moet een tag hebben die de naam van de nieuwe eigenschap specificeert en een tag die het scriptblok omsluit dat de <ScriptProperty> <Name> <GetScriptBlock> eigenschapswaarde retourneert.

De eigenschap VersionInfo van het object System.IO.FileInfo is bijvoorbeeld een script-eigenschap 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 Types.ps1xml cmdlet uit om uw bestanden in een PowerShell-sessie te Update-TypeData laden. Als u wilt dat de typen in uw bestand voorrang hebben op typen in het ingebouwde bestand, voegt u de Types.ps1xml parameter PrependData van Update-TypeData toe. Update-TypeData is alleen van invloed op de huidige sessie. Als u de wijziging wilt maken in alle toekomstige sessies, exporteert u de sessie of voegt u de Update-TypeData opdracht toe aan uw PowerShell-profiel.

Uitzonderingen die optreden in eigenschappen of van het toevoegen van eigenschappen aan een Update-TypeData opdracht, rapporteren geen fouten aan StdErr . Dit is om uitzonderingen te onderdrukken die in veel algemene typen optreden tijdens het opmaken en uitvoer. Als u .NET-eigenschappen krijgt, kunt u in plaats daarvan de onderdrukking van uitzonderingen ronddraaien met behulp van de syntaxis van de methode, zoals wordt weergegeven in het volgende voorbeeld:

"hello".get_Length()

De syntaxis van de methode kan alleen worden gebruikt met .NET-eigenschappen. Eigenschappen die worden toegevoegd door het uitvoeren van de Update-TypeData cmdlet kunnen de syntaxis van de methode niet gebruiken.

Een XMLTypes.ps1bestand ondertekenen

Als u gebruikers van uw bestand Types.ps1xml wilt beveiligen, kunt u het bestand ondertekenen met behulp van een digitale handtekening. Zie voor meer informatie about_Signing.

Zie ook

about_Signing

Copy-Item

Copy-ItemProperty

Get-Member

Get-TypeData

Remove-TypeData

Update-TypeData