THEMA
    about_Types.ps1xml

KURZBESCHREIBUNG
    Erläutert, wie Sie mit den Types.ps1xml-Dateien die Microsoft 
    .NET Framework-Typen der Objekte erweitern können, die in Windows 
    PowerShell verwendet werden. 

DETAILBESCHREIBUNG
    Die Datei "Types.ps1xml" im Windows PowerShell-Installationsverzei
    chnis ("$pshome") ist eine XML-basierte Textdatei, mit der Sie 
    den Objekten, die in Windows PowerShell verwendet werden, 
    Eigenschaften und Methoden hinzufügen können. Windows PowerShell 
    verfügt über eine integrierte Types.ps1xml-Datei, mit der .NET 
    Framework-Typen mehrere Elemente hinzugefügt werden. Sie können 
    jedoch zusätzliche Types.ps1xml-Dateien erstellen, um die Typen 
    darüber hinaus zu erweitern.

    Arrayobjekte (System.Array) weisen beispielsweise standardmäßig 
    eine length-Eigenschaft auf, die die Anzahl der Objekte im Array 
    angibt. Da die Eigenschaft mit dem Namen "length" jedoch nur 
    unzureichend beschrieben wird, fügt Windows PowerShell eine 
    Aliaseigenschaft mit dem Namen "Count" hinzu, die den gleichen 
    Wert anzeigt. Mit dem folgenden XML wird dem System.Array-Typ die 
    Count-Eigenschaft hinzugefügt.

<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 jedes Array, wie im folgenden Beispiel 
    veranschaulicht wird.

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

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

	C:\PS> (1, 2, 3, 4).count
	4

	C:\PS> (1, 2, 3, 4).length
	4
 

  Erstellen neuer Types.ps1xml-Dateien

      Die mit Windows PowerShell installierten PS1XML-Dateien werden 
      digital signiert, um Manipulationen zu verhindern, da die 
      Formatierung Skriptblöcke enthalten kann. Erstellen Sie daher 
      eigene Types.ps1xml-Dateien und fügen Sie diese der Windows 
      PowerShell-Konsole hinzu, um einem .NET Framework-Typ eine 
      Eigenschaft oder eine Methode hinzuzufügen.

      Um eine neue Datei zu erstellen, kopieren Sie zunächst eine 
      vorhandene Types.ps1xml-Datei. Die neue Datei kann beliebig 
      benannt werden, jedoch muss sie die Dateinamenerweiterung 
      ".ps1xml" aufweisen. Sie können die neue Datei in ein 
      beliebiges Verzeichnis einfügen, auf das Windows PowerShell 
      zugreifen kann, es ist jedoch sinnvoll, die Dateien im Windows 
      PowerShell-Installationsverzeichnis ("$pshome") oder in einem 
      Unterverzeichnis des Installationsverzeichnisses zu speichern.

      Wenn Sie die neue Datei gespeichert haben, fügen Sie sie mit 
      dem Cmdlet "Update-TypeData" der Windows PowerShell-Konsole 
      hinzu. Wenn eigene Typen Vorrang gegenüber den Typen in der 
      integrierten Datei haben sollen, verwenden Sie den 
      PrependData-Parameter des Cmdlets "Update-TypeData". 
      Update-TypeData wirkt sich nur auf die aktuelle Konsole aus. 
      Exportieren Sie die Konsole, oder fügen Sie dem Windows 
      PowerShell-Profil den Befehl "Update-TypeData" hinzu, um die 
      Änderung für alle zukünftigen Konsolen zu übernehmen.


  Types.ps1xml und Add-Member

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

      Weitere Informationen finden Sie unter "Add-Member".


  Beispiel: Hinzufügen eines Age-Elements zu FileInfo-Objekten

      In diesem Beispiel wird veranschaulicht, wie Dateiobjekten 
      (System.IO.FileInfo) eine Age-Eigenschaft hinzugefügt wird. Das 
      Alter einer Datei ergibt sich aus dem Unterschied zwischen der 
      Erstellungszeit und der aktuellen Zeit in Tagen.

      Am besten verwenden Sie die ursprüngliche Types.ps1xml-Datei 
      als Vorlage für die neue Datei. Mit dem nachfolgenden Befehl 
      wird die ursprüngliche Datei in die Datei "MyTypes.ps1xml" im 
      Verzeichnis "$pshome" kopiert.

          copy-item Types.ps1xml MyTypes.ps1xml


      Öffnen Sie anschließend die Datei "Types.ps1xml" in einem 
      beliebigen XML- oder Text-Editor, beispielsweise Editor. 
      Verwenden Sie ein <ScriptProperty>-Tag als Vorbild für die neue 
      Age-Eigenschaft, da die Age-Eigenschaft mit einem Skriptblock 
      berechnet wird.  

      Kopieren Sie das XML zwischen dem <Type>-Tag und dem 
      </Type>-Tag des Codes, um die Skripteigenschaft zu erstellen. 
      Löschen Sie anschließend den verbleibenden Teil der Datei bis 
      auf das öffnende <?xml>-Tag und das öffnende <Types>-Tag sowie 
      das schließende </Types>-Tag. Um Fehler zu vermeiden, muss auch 
      die digitale Signatur gelöscht werden.

      Beginnen Sie mit der Modellskripteigenschaft, beispielsweise 
      mit der nachfolgend angegebenen Skripteigenschaft, die aus der 
      ursprünglichen Types.ps1xml-Datei kopiert wurde.

          <?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>


      Ändern Sie anschließend den Namen des .NET Framework-Typs, den 
      Namen der Eigenschaft und den Wert des Skriptblocks, um eine 
      Age-Eigenschaft für Dateiobjekte zu erstellen.


          <?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>


      Speichern und schließen Sie die Datei, und fügen Sie der 
      aktuellen Konsole die neue Types.ps1xml-Datei mit einem 
      Update-TypeData-Befehl wie dem folgenden hinzu. Mit dem Befehl 
      wird der PrependData-Parameter verwendet, um die neue Datei an 
      einer höheren Stelle in der Rangfolge einzufügen als die 
      ursprüngliche Datei. (Weitere Informationen über Update-TypeData
       finden Sie unter "Update-TypeData".)

          update-typedata -prependpath $pshome\MyTypes.ps1xml

      Um die Änderung zu testen, verwenden Sie den Befehl 
      "Get-ChildItem", um die Datei "PowerShell.exe" im Verzeichnis 
      "$pshome" abzurufen, und übergeben Sie dann die Datei über die 
      Pipeline an das Cmdlet "Format-List", um alle Eigenschaften der 
      Datei aufzuführen. Nach der Änderung wird die Age-Eigenschaft 
      in der Liste angezeigt.

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

      Sie können die Age-Eigenschaft der Datei auch mit folgendem 
      Befehl anzeigen:

	  (get-childitem $pshome\powershell.exe).age
          16
 

  XML in Types.ps1xml-Dateien

      Das <Types>-Tag schließt alle Typen ein, die in der Datei 
      definiert wurden.
      Es sollte nur ein Paar <Types>-Tags verwendet werden.

      Jeder in der Datei enthaltene .NET Framework-Typ sollte durch 
      ein Paar <Type>-Tags dargestellt werden. 

      Die Type-Tags müssen folgende Tags enthalten:

          <Name>: Ein Paar <Name>-Tags, die den Namen des betreffenden 
                  .NET Framework-Typs einschließen.

          <Members>: Ein Paar <Members>-Tags, die die Tags für die 
                     neuen Eigenschaften und Methoden einschließen, 
                     die für den .NET Framework-Typ definiert werden.

      <Members>-Tags können alle nachfolgend angegebenen Elementtags 
      enthalten.

      <AliasProperty>: Definiert einen neuen Namen für eine 
      vorhandene Eigenschaft.

         Das <AliasProperty>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen der neuen Eigenschaft angeben, sowie 
         über ein Paar <ReferencedMemberName>-Tags, die die 
         vorhandene Eigenschaft angeben.

         Die Count-Aliaseigenschaft ist beispielsweise 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 
      Framework-Klasse.

         Das <CodeMethod>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen der neuen Methode angeben, sowie 
         über ein Paar <GetCodeReference>-Tags, die den Code mit der 
         Definition der Methode angeben.

         Die Mode-Eigenschaft von Verzeichnissen (System.IO.DirectoryI
         nfo- Objekte) ist beispielsweise eine Codeeigenschaft, die 
         im Windows PowerShell-Dateisystemanbieter definiert wird.
        
             <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>

 
      <CodeMethod>: Verweist auf eine statische Methode einer .NET 
      Framework-Klasse.

         Das <CodeProperty>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen der neuen Eigenschaft angeben, sowie 
         über ein Paar <GetCodeReference>-Tags, die den Code mit der 
         Definition der Eigenschaft angeben.

         Die Mode-Eigenschaft von Verzeichnissen (System.IO.DirectoryI
         nfo- Objekte) ist beispielsweise eine Codeeigenschaft, die 
         im Windows PowerShell-Dateisystemanbieter definiert wird.
             <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 Elementen 
      (Eigenschaften und Methoden). 

         Die <MemberSet>-Tags werden innerhalb der primären 
         <Members>-Tags angezeigt. Diese müssen ein Paar <Name>-Tags 
         einschließen, zwischen denen der Name des Elementsatzes 
         sowie ein Paar sekundäre <Members>-Tags notiert werden, die 
         die Elemente (Eigenschaften und Methoden) im Satz 
         einschließen. Alle Tags, mit denen eine Eigenschaft 
         (beispielsweise <NoteProperty> oder <ScriptProperty> oder 
         eine Methode (beispielsweise <Method> oder <ScriptMethod>) 
         erstellt wird, können Elemente des Satzes sein.

         In Types.ps1xml-Dateien wird das <MemberSet>-Tag verwendet, 
         um die Standardansichten der .NET Framework-Objekte in Windows 
         PowerShell zu definieren. In diesem Fall ist der Name des 
         Elementsatzes (der Wert in den <Name>-Tags) immer 
         "PsStandardMembers", und die Namen der Eigenschaftentags 
         (der Wert von <Name>) sind einer der folgenden:

	    - DefaultDisplayProperty: Eine einzelne Eigenschaft eines Objekts.

            - DefaultDisplayPropertySet: Eine oder mehrere 
              Eigenschaften eines Objekts.

            - DefaultKeyPropertySet: Eine oder mehrere Schlüsseleigens
              chaften eines Objekts. Eine Schlüsseleigenschaft 
              identifiziert Instanzen von Eigenschaftenwerten, 
              beispielsweise die ID-Nummer von Elementen in einem 
              Sitzungsverlauf.

         Das folgende XML definiert z. B. die Standardanzeige von Diensten 
         (System.ServiceProcess.ServiceController-Objekte), die vom Cmdlet 
         "Get-Service" zurückgegeben werden. Darin wird der Elementsatz 
         "PsStandardMembers" definiert, der aus einem Standardeigenschaftensatz
         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 systemeigene Methode des zugrunde 
      liegenden Objekts. 

      <Methods>: Eine Auflistung der Methoden des Objekts.

      <NoteProperty>: Definiert eine Eigenschaft mit einem statischen 
      Wert.

         Das <NoteProperty>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen der neuen Eigenschaft angeben, sowie 
         über ein Paar <Value>-Tags, die den Wert der Eigenschaft angeben.

         Beispielsweise wird mit dem folgenden XML eine 
         Status-Eigenschaft für Verzeichnisse (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>


      <ParameterizedProperty>: Eigenschaften, die Argumente 
      akzeptieren und einen Wert zurückgeben.

      <Properties>: Eine Auflistung der Eigenschaften des 
      Auflistungsobjekts.

      <Property>: Eine Eigenschaft des Basisobjekts.

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

         Das <PropertySet>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen des Eigenschaftensatzes angeben, 
         sowie über ein Paar <ReferencedProperty>-Tags, die die 
         Eigenschaften angeben. Der Name einer Eigenschaft wird 
         jeweils in ein Paar <Name>-Tags eingeschlossen. 

         In Types.ps1xml werden <PropertySet>-Tags verwendet, um 
         Eigenschaftensätze für die Standardanzeige eines Objekts zu 
         definieren. Sie können die Standardanzeigen mit dem Wert 
         "PsStandardMembers" im <Name>-Tag eines <MemberSet>-Tags 
         definieren.

         Beispielsweise wird mit dem folgenden XML eine 
         Status-Eigenschaft für Verzeichnisse (System.IO.DirectoryInfo
         -Objekte) erstellt. Der Wert der Status-Eigenschaft ist 
         immer "Success".

             <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 Paar <Name>-Tags 
         verfügen, die den Namen der neuen Methode angeben, sowie 
         über ein Paar <Script>-Tags, die den Skriptblock 
         einschließen, der das Methodenergebnis zurückgibt.
         Beispielsweise verwenden die ConvertToDateTime-Skriptmethode 
         und die ConvertFromDateTime-Skriptmethode von Verwaltungsobjekten 
         (System.System.Management.ManagementObject) die statische 
         ToDateTime-Methode und die statische ToDmtfDateTime-Methode der 
         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>: Definiert eine Eigenschaft, deren Wert die 
                        Ausgabe eines Skripts ist.

         Das <ScriptProperty>-Tag muss über ein Paar <Name>-Tags 
         verfügen, die den Namen der neuen Eigenschaft angeben, sowie 
         über ein Paar <GetScriptBlock>-Tags, die den Skriptblock 
         einschließen, der den Eigenschaftenwert zurückgibt.

         Beispielsweise ist die VersionInfo-Eigenschaft von Dateien 
         (System.IO.FileInfo-Objekte) eine Skripteigenschaft, die aus 
         der Verwendung der FullName-Eigenschaft der statischen 
         GetVersionInfo-Methode von System.Diagnostics.FileVersionInfo
         -Objekten resultiert.

             <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 Software 
      Development Kit (SDK) in der MSDN (Microsoft Developer Network) 
      Library unter https://go.microsoft.com/fwlink/?LinkId=144538 (möglicherweise auf
      Englisch).


  Update-TypeData
    
      Um die Types.ps1xml-Dateien in eine Windows PowerShell-Konsole 
      zu laden, verwenden Sie das Cmdlet "Update-TypeData". Wenn die 
      Typen in der Datei Vorrang vor den Typen in der integrierten 
      Types.ps1xml-Datei haben sollen, verwenden Sie den 
      PrependData-Parameter von Update-TypeData. Update-TypeData 
      wirkt sich nur auf die aktuelle Konsole aus. Exportieren Sie 
      die Konsole, oder fügen Sie dem Windows PowerShell-Profil den 
      Befehl "Update-TypeData" hinzu, um die Änderung für alle 
      zukünftigen Konsolen zu übernehmen.


  Signieren einer Types.ps1xml-Datei

      Zum Schutz der Benutzer der Types.ps1xml-Datei können Sie die 
      Datei mit einer digitalen Signatur signieren. Weitere 
      Informationen finden Sie unter "about_Signing".
    	

SIEHE AUCH
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData





Inhaltsverzeichnis