Freigeben über


about_Types.ps1xml

Kurze Beschreibung

Erläutert die Verwendung von Types.ps1xml Dateien zum Erweitern der Objekttypen, die in PowerShell verwendet werden.

Lange Beschreibung

Daten vom erweiterten Typ definieren zusätzliche Eigenschaften und Methoden ("Member") von Objekttypen in PowerShell. Es gibt zwei Techniken zum Hinzufügen erweiterter Typdaten zu einer PowerShell-Sitzung.

  • Types.ps1xml file: Eine XML-Datei, die Daten vom erweiterten Typ definiert.
  • Update-TypeData: Ein Cmdlet, das Dateien neu lädt Types.ps1xml und erweiterte Daten für Typen in der aktuellen Sitzung definiert.

In diesem Thema werden Dateien beschrieben Types.ps1xml . Weitere Informationen zur Verwendung des Cmdlets Update-TypeData zum Hinzufügen dynamischer erweiterter Typdaten zur aktuellen Sitzung finden Sie unter Update-TypeData.

Informationen zu Daten mit erweitertem Typ

Daten vom erweiterten Typ definieren zusätzliche Eigenschaften und Methoden ("Member") von Objekttypen in PowerShell. Sie können jeden von PowerShell unterstützten Typ erweitern und die hinzugefügten Eigenschaften und Methoden auf die gleiche Weise verwenden wie die Eigenschaften, die für die Objekttypen definiert sind.

PowerShell fügt beispielsweise allen System.DateTime Objekten eine DateTime-Eigenschaft hinzu, z. B. den Objekten, die vom Get-Date Cmdlet zurückgegeben werden.

(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM

Sie finden die DateTime-Eigenschaft nicht in der Beschreibung der System.DateTime-Struktur , da PowerShell die Eigenschaft hinzufügt und nur in PowerShell sichtbar ist.

PowerShell definiert intern einen Standardsatz erweiterter Typen. Diese Typinformationen werden beim Start in jede PowerShell-Sitzung geladen. Die DateTime-Eigenschaft ist Teil dieses Standardsatzes. Vor PowerShell 6 wurden die Typdefinitionen der Types.ps1xml Datei im PowerShell-Installationsverzeichnis ($PSHOME) gespeichert.

Hinzufügen von Daten vom erweiterten Typ zu PowerShell

Es gibt drei Quellen für Daten vom erweiterten Typ in PowerShell-Sitzungen.

  • Daten vom erweiterten Typ werden von PowerShell definiert und automatisch in jede PowerShell-Sitzung geladen. Ab PowerShell 6 werden diese Informationen in PowerShell kompiliert und nicht mehr in einer Types.ps1xml Datei ausgeliefert.

  • Die Types.ps1xml Dateien, die module exportieren, werden geladen, wenn das Modul in die aktuelle Sitzung importiert wird.

  • Erweiterte Typdaten, die mithilfe des Update-TypeData Cmdlets definiert werden, werden nur der aktuellen Sitzung hinzugefügt. Es wird nicht in einer Datei gespeichert.

In der Sitzung werden die Erweiterten Typdaten aus den drei Quellen auf die gleiche Weise auf Objekte angewendet und stehen für alle Objekte der angegebenen Typen zur Verfügung.

TypeData-Cmdlets

Die folgenden Cmdlets sind im Modul Microsoft.PowerShell.Utility in PowerShell 3.0 und höher enthalten.

  • Get-TypeData: Ruft Daten vom erweiterten Typ in der aktuellen Sitzung ab.
  • Update-TypeData: Lädt Dateien neu Types.ps1xml . Fügt der aktuellen Sitzung erweiterte Typdaten hinzu.
  • Remove-TypeData: Entfernt Daten vom erweiterten Typ aus der aktuellen Sitzung.

Weitere Informationen zu diesen Cmdlets finden Sie im Hilfethema zu den einzelnen Cmdlets.

Integrierte Types.ps1xml-Dateien

Die Types.ps1xml Dateien im $PSHOME Verzeichnis werden automatisch jeder Sitzung hinzugefügt.

Die Types.ps1xml Datei im PowerShell-Installationsverzeichnis ($PSHOME) ist eine XML-basierte Textdatei, mit der Sie den in PowerShell verwendeten Objekten Eigenschaften und Methoden hinzufügen können. PowerShell verfügt über integrierte Dateien, die den .NET-Typen Types.ps1xml mehrere Elemente hinzufügen. Sie können jedoch zusätzliche Types.ps1xml Dateien erstellen, um die Typen weiter zu erweitern.

Arrayobjekte (System.Array) verfügen beispielsweise standardmäßig über eine Length-Eigenschaft , die die Anzahl der Objekte im Array auflistet. Da der Name Length die Eigenschaft jedoch nicht eindeutig beschreibt, fügt PowerShell eine Aliaseigenschaft mit dem Namen Count hinzu, die denselben Wert anzeigt. Der folgende XML-Code fügt dem Typ die Count-EigenschaftSystem.Array hinzu.

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>
        Length
      </ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

Um die neue AliasProperty abzurufen, verwenden Sie einen Get-Member Befehl für ein beliebiges Array, wie im folgenden Beispiel gezeigt.

Get-Member -InputObject (1,2,3,4)

Der Befehl gibt die folgenden Ergebnisse zurück.

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)
# ...

Daher können Sie entweder die Count-Eigenschaft oder die Length-Eigenschaft von Arrays in PowerShell verwenden. Beispiel:

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

Erstellen neuer Types.ps1xml-Dateien

Die .ps1xml mit PowerShell installierten Dateien werden digital signiert, um Manipulationen zu verhindern, da die Formatierung Skriptblöcke enthalten kann. Um einem .NET-Typ eine Eigenschaft oder Methode hinzuzufügen, erstellen Sie daher ihre eigenen Types.ps1xml Dateien, und fügen Sie sie dann Ihrer PowerShell-Sitzung hinzu.

Um eine neue Datei zu erstellen, kopieren Sie zunächst eine vorhandene Types.ps1xml Datei. Die neue Datei kann einen beliebigen Namen haben, muss aber über eine .ps1xml Dateinamenerweiterung verfügen. Sie können die neue Datei in jedem Verzeichnis platzieren, auf das PowerShell zugreifen kann. Es ist jedoch hilfreich, die Dateien im PowerShell-Installationsverzeichnis ($PSHOME) oder in einem Unterverzeichnis des Installationsverzeichnisses zu platzieren.

Wenn Sie die neue Datei gespeichert haben, verwenden Sie das Update-TypeData Cmdlet, um die neue Datei ihrer PowerShell-Sitzung hinzuzufügen. Wenn Ihre Typen Vorrang vor den integrierten Typen haben sollen, die definiert sind, verwenden Sie den PrependData-Parameter des Update-TypeData Cmdlets. Update-TypeData wirkt sich nur auf die aktuelle Sitzung aus. Um die Änderung an allen zukünftigen Sitzungen vorzunehmen, exportieren Sie die Konsole, oder fügen Sie den Update-TypeData Befehl ihrem PowerShell-Profil hinzu.

Types.ps1xml und Add-Member

Die Types.ps1xml Dateien fügen allen Instanzen der Objekte des angegebenen .NET-Typs in der betroffenen PowerShell-Sitzung Eigenschaften und Methoden hinzu. Wenn Sie jedoch nur einer instance eines Objekts Eigenschaften oder Methoden hinzufügen müssen, verwenden Sie das Add-Member Cmdlet.

Weitere Informationen finden Sie unter Add-Member.

Beispiel: Hinzufügen eines Alterselements zu FileInfo-Objekten

In diesem Beispiel wird gezeigt, wie Eine Age-Eigenschaft zu System.IO.FileInfo-Objekten hinzugefügt wird. Das Alter einer Datei ist der Unterschied zwischen der Erstellungszeit und der aktuellen Zeit in Tagen.

Da die Age-Eigenschaft mithilfe eines Skriptblocks berechnet wird, suchen Sie nach einem <ScriptProperty> Tag, das als Modell für die neue Age-Eigenschaft verwendet werden soll.

Speichern Sie den folgenden XML-Code in der Datei $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>

Führen Sie aus Update-TypeData , um die neue Types.ps1xml Datei zur aktuellen Sitzung hinzuzufügen. Der Befehl verwendet den PrependData-Parameter , um die neue Datei in einer Rangfolge höher als die ursprünglichen Definitionen zu platzieren.

Weitere Informationen zu Update-TypeDatafinden Sie unter Update-TypeData.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Führen Sie zum Testen der Änderung einen Get-ChildItem Befehl aus, um die PowerShell.exe Datei im $PSHOME Verzeichnis abzurufen, und leiten Sie die Datei dann an das Format-List Cmdlet weiter, um alle Eigenschaften der Datei aufzulisten. Infolge der Änderung wird die Age-Eigenschaft in der Liste angezeigt.

Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142

Die XML in Types.ps1xml-Dateien

Die vollständige Schemadefinition finden Sie unter Types.xsd im PowerShell-Quellcoderepository auf GitHub.

Das <Types> Tag schließt alle Typen ein, die in der Datei definiert sind. Es sollte nur ein <Types> Tag vorhanden sein.

Jeder in der Datei erwähnte .NET-Typ sollte durch ein <Type> -Tag dargestellt werden.

Die Typtags müssen die folgenden Tags enthalten:

<Name>: Schließt den Namen des betroffenen .NET-Typs ein.

<Members>: Schließt die Tags für die neuen Eigenschaften und Methoden ein, die für den .NET-Typ definiert sind.

Jedes der folgenden Membertags kann sich innerhalb des <Members> -Tags befinden.

AliasProperty

Definiert einen neuen Namen für eine vorhandene Eigenschaft.

Das <AliasProperty> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Eigenschaft angibt, und ein <ReferencedMemberName> Tag, das die vorhandene Eigenschaft angibt.

Beispielsweise ist die Count-Aliaseigenschaft ein Alias für die Length-Eigenschaft von Arrayobjekten.

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>Length</ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

CodeMethod

Verweist auf eine statische Methode einer .NET-Klasse.

Das <CodeMethod> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Methode angibt, und ein <CodeReference> Tag, das den Code angibt, in dem die Methode definiert ist.

Die ToString-Methode ist beispielsweise der Name der Codedefinition 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

Verweist auf eine statische Methode einer .NET-Klasse.

Das <CodeProperty> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Eigenschaft angibt, und ein <GetCodeReference> Tag, das den Code angibt, in dem die Eigenschaft definiert ist.

Die Mode-Eigenschaft von System.IO.DirectoryInfo Objekten ist beispielsweise eine Codeeigenschaft, die im PowerShell FileSystem-Anbieter definiert ist.

<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

Definiert eine Auflistung von Membern (Eigenschaften und Methoden).

Die <MemberSet> Tags werden innerhalb der primären <Members> Tags angezeigt. Die Tags müssen ein <Name> Tag einschließen, das den Namen des Membersatzes umgibt, und ein sekundäres <Members> Tag, das die Member (Eigenschaften und Methoden) in der Gruppe umgibt. Alle Tags, die eine Eigenschaft (z <NoteProperty> . B. oder <ScriptProperty>) oder eine Methode (z <Method> . B. oder <ScriptMethod>) erstellen, können Elemente der Gruppe sein.

In Types.ps1xml Dateien wird das <MemberSet> -Tag verwendet, um die Standardansichten der .NET-Objekte in PowerShell zu definieren. In diesem Fall lautet der Name des Membersatzes (der Wert innerhalb der <Name> Tags) immer PsStandardMembers, und die Namen der Eigenschaften (der Wert des <Name> Tags) sind einer der folgenden:

  • DefaultDisplayProperty: Eine einzelne Eigenschaft eines Objekts.

  • DefaultDisplayPropertySet: Mindestens eine Eigenschaft eines Objekts.

  • DefaultKeyPropertySet: Mindestens eine Schlüsseleigenschaft eines Objekts. Eine Schlüsseleigenschaft identifiziert Instanzen von Eigenschaftenwerten, z. B. die ID-Anzahl von Elementen in einem Sitzungsverlauf.

Mit dem folgenden XML-Code wird beispielsweise die Standardanzeige von Diensten (System.ServiceProcess.ServiceController -Objekten) definiert, die Get-Service vom Cmdlet zurückgegeben werden. Es definiert einen Membersatz namens PsStandardMembers , der aus einer Standardeigenschaft mit den Eigenschaften Status, Name und DisplayName besteht.

<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>: Verweist auf eine native Methode des zugrunde liegenden Objekts.

<Methods>: Eine Auflistung der Methoden des -Objekts.

HinweisEigenschaften

Definiert eine Eigenschaft mit einem statischen Wert.

Das <NoteProperty> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Eigenschaft angibt, und ein <Value> Tag, das den Wert der Eigenschaft angibt.

Mit dem folgenden XML-Code wird beispielsweise eine Status-Eigenschaft für System.IO.DirectoryInfo-Objekte erstellt. Der Wert der Status-Eigenschaft ist immer Success.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <NoteProperty>
      <Name>Status</Name>
      <Value>Success</Value>
    </NoteProperty>
  </Members>
</Type>

PropertySet

Eigenschaften, die Argumente annehmen und einen Wert zurückgeben.

<Properties>: Eine Auflistung der Eigenschaften des -Objekts.

<Property>: Eine Eigenschaft des Basisobjekts.

<PropertySet>: Definiert eine Auflistung von Eigenschaften des -Objekts.

Das <PropertySet> Tag muss über ein <Name> Tag verfügen, das den Namen des Eigenschaftensatzes angibt, und über ein <ReferencedProperty> Tag, das die Eigenschaften angibt. Die Namen der Eigenschaften sind im <Name> Tag eingeschlossen.

In Types.ps1xmlwerden Tags <PropertySet> verwendet, um Eigenschaftensätze für die Standardanzeige eines Objekts zu definieren. Sie können die Standardanzeigen anhand des Werts PsStandardMembers im <Name> Tag eines <MemberSet> Tags identifizieren.

Im folgenden XML-Code wird beispielsweise ein PropertySet mit dem Namen DefaultDisplayPropertySet mit drei ReferencedProperties erstellt.

<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

Definiert eine Methode, deren Wert die Ausgabe eines Skripts ist.

Das <ScriptMethod> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Methode angibt, und ein <Script> Tag, das den Skriptblock einschließt, der das Methodenergebnis zurückgibt.

Beispielsweise sind die ConvertToDateTime Methoden und ConvertFromDateTime von Verwaltungsobjekten (System.System.Management.ManagementObject) Skriptmethoden, die die ToDateTimeToDmtfDateTime statischen Methoden der System.Management.ManagementDateTimeConverter -Klasse verwenden.

<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

Definiert eine Eigenschaft, deren Wert die Ausgabe eines Skripts ist.

Das <ScriptProperty> Tag muss über ein <Name> Tag verfügen, das den Namen der neuen Eigenschaft angibt, und ein <GetScriptBlock> Tag, das den Skriptblock umschließt, der den Eigenschaftswert zurückgibt.

Beispielsweise ist die VersionInfo-Eigenschaft des System.IO.FileInfo-Objekts eine Skripteigenschaft, die sich aus der Verwendung der FullName-Eigenschaft der statischen GetVersionInfo-Methode von System.Diagnostics.FileVersionInfo-Objekten ergibt.

<Type>
  <Name>System.IO.FileInfo</Name>
  <Members>
    <ScriptProperty>
      <Name>VersionInfo</Name>
      <GetScriptBlock>
      [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
      </GetScriptBlock>
    </ScriptProperty>
  </Members>
</Type>

Weitere Informationen finden Sie im Windows PowerShell Software Development Kit (SDK).

Update-TypeData

Führen Sie das Update-TypeData Cmdlet aus, um Ihre Types.ps1xml Dateien in eine PowerShell-Sitzung zu laden. Wenn die Typen in Ihrer Datei Vorrang vor Typen in der integrierten Datei haben sollen, fügen Sie den PrependData-ParameterTypes.ps1xml von hinzuUpdate-TypeData. Update-TypeData wirkt sich nur auf die aktuelle Sitzung aus. Um die Änderung an allen zukünftigen Sitzungen vorzunehmen, exportieren Sie die Sitzung, oder fügen Sie den Update-TypeData Befehl ihrem PowerShell-Profil hinzu.

Ausnahmen, die in Eigenschaften oder beim Hinzufügen von Eigenschaften zu einem Update-TypeData Befehl auftreten, melden keine Fehler an StdErr. Dadurch werden Ausnahmen unterdrückt, die während der Formatierung und Ausgabe in vielen gängigen Typen auftreten würden. Wenn Sie .NET-Eigenschaften erhalten, können Sie die Unterdrückung von Ausnahmen umgehen, indem Sie stattdessen die Methodensyntax verwenden, wie im folgenden Beispiel gezeigt:

"hello".get_Length()

Beachten Sie, dass die Methodensyntax nur mit .NET-Eigenschaften verwendet werden kann. Eigenschaften, die durch Ausführen des Cmdlets Update-TypeData hinzugefügt werden, können keine Methodensyntax verwenden.

Signieren einer Datei "Types.ps1xml"

Um Benutzer Ihrer Types.ps1xml Datei zu schützen, können Sie die Datei mit einer digitalen Signatur signieren. Weitere Informationen finden Sie unter about_Signing.

Weitere Informationen