RUBRIQUE
    about_Types.ps1xml

DESCRIPTION COURTE
    Explique comment les fichiers Types.ps1xml vous permettent 
    d'étendre les types Microsoft .NET Framework des objets utilisés 
    dans Windows PowerShell. 

DESCRIPTION LONGUE
    Le fichier Types.ps1xml situé dans le répertoire d'installation 
    de Windows PowerShell ($pshome) est un fichier texte XML qui vous 
    permet d'ajouter des propriétés et des méthodes aux objets 
    utilisés dans Windows PowerShell. Windows PowerShell comprend un 
    fichier Types.ps1xml intégré qui ajoute plusieurs éléments aux 
    types .NET Framework, mais vous pouvez créer des fichiers Types.ps1xml 
    supplémentaires afin d'étendre davantage les types.

    Par exemple, les objets tableau (System.Array) ont, par défaut, 
    une propriété Length qui répertorie le nombre d'objets contenus 
    dans le tableau. Toutefois, étant donné que le nom " Length " 
    (longueur) ne décrit pas clairement la propriété, Windows 
    PowerShell ajoute une propriété d'alias nommée " Count " (nombre) 
    qui affiche la même valeur. Le code XML suivant ajoute la 
    propriété Count au type System.Array.

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

    Pour obtenir la nouvelle valeur AliasProperty, utilisez une 
    commande Get-Member sur n'importe quel tableau, comme illustré 
    dans l'exemple suivant.

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


    La commande retourne les résultats suivants.

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

    En conséquence, vous pouvez utiliser la propriété Count ou la 
    propriété Length des tableaux dans Windows PowerShell. Par exemple :

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

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

  Création de nouveaux fichiers Types.ps1xml

      Les fichiers .ps1xml installés avec Windows PowerShell sont 
      signés numériquement pour empêcher la falsification, car la 
      mise en forme peut inclure des blocs de script. Par conséquent, 
      pour ajouter une propriété ou une méthode à un type .NET 
      Framework, créez vos propres fichiers Types.ps1xml, puis 
      ajoutez-les à votre console Windows PowerShell.

      Pour créer un nouveau fichier, commencez par copier un fichier 
      Types.ps1xml existant. Le nouveau fichier peut porter n'importe 
      quel nom, mais ce dernier doit avoir l'extension .ps1xml. Vous 
      pouvez placer le nouveau fichier dans n'importe quel répertoire 
      accessible à Windows PowerShell. Il est toutefois pratique de 
      placer les fichiers dans le répertoire d'installation de 
      Windows PowerShell ($pshome) ou dans un sous-répertoire de ce 
      dernier.

      Après avoir enregistré le nouveau fichier, utilisez l'applet de 
      commande Update-TypeData pour l'ajouter à votre console Windows 
      PowerShell. Si vous voulez que vos types soient prioritaires 
      sur les types définis dans le fichier intégré, utilisez le 
      paramètre PrependData de l'applet de commande Update-TypeData. 
      Update-TypeData affecte uniquement la console actuelle. Pour 
      appliquer la modification à toutes les futures consoles, 
      exportez la console ou ajoutez la commande Update-TypeData à 
      votre profil Windows PowerShell.


  Types.ps1xml et Add-Member

      Les fichiers Types.ps1xml ajoutent des propriétés et des 
      méthodes à toutes les instances des objets du type .NET 
      Framework spécifié dans la console Windows PowerShell affectée. 
      Toutefois, si vous devez ajouter des propriétés ou des méthodes 
      à une seule instance d'un objet, utilisez l'applet de commande 
      Add-Member.

      Pour plus d'informations, consultez Add-Member.


  Exemple : Ajout d'un membre Age à des objets FileInfo

      Cet exemple montre comment ajouter une propriété Age à des 
      objets fichier (System.IO.FileInfo). L'âge d'un fichier est la 
      différence entre l'heure de sa création et l'heure actuelle, 
      exprimée en jours.

      Le plus simple est d'utiliser le fichier Types.ps1xml d'origine 
      comme modèle pour le nouveau fichier. La commande suivante 
      copie le fichier d'origine vers un fichier appelé 
      MyTypes.ps1xml dans le répertoire $pshome.

          copy-item Types.ps1xml MyTypes.ps1xml


      Ouvrez ensuite le fichier Types.ps1xml dans n'importe quel 
      éditeur de texte ou XML, tel que le Bloc-notes. La propriété 
      Age étant calculée à l'aide d'un bloc de script, recherchez une 
      balise <ScriptProperty> à utiliser comme modèle pour la 
      nouvelle propriété Age. 

      Copiez le code XML situé entre les balises <Type> et </Type> du 
      code pour créer la propriété de script. Supprimez ensuite le 
      reste du fichier, excepté les balises d'ouverture <?xml> et 
      <Types> et la balise de fermeture </Types>. Vous devez 
      également supprimer la signature numérique pour éviter toute erreur.

      Commencez par la propriété de script du modèle, telle que la 
      propriété de script suivante, qui a été copiée à partir du 
      fichier Types.ps1xml d'origine.

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


      Modifiez ensuite le nom du type .NET Framework, le nom de la 
      propriété et la valeur du bloc de script afin de créer une 
      propriété Age pour les objets fichier.


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


      Après avoir enregistré le fichier et l'avoir fermé, utilisez 
      une commande Update-TypeData, telle que la commande suivante, 
      pour ajouter le nouveau fichier Types.ps1xml à la console 
      actuelle. La commande utilise le paramètre PrependData pour 
      attribuer au nouveau fichier une priorité plus élevée que le 
      fichier d'origine. (Pour plus d'informations sur Update-TypeData
      , consultez Update-TypeData.)

          update-typedata -prependpath $pshome\MyTypes.ps1xml

      Pour tester la modification, utilisez une commande 
      Get-ChildItem pour placer le fichier PowerShell.exe dans le 
      répertoire $pshome, puis redirigez le fichier vers l'applet de 
      commande Format-List afin de répertorier toutes les propriétés 
      du fichier. Suite à la modification apportée, la propriété Age 
      apparaît dans la liste.

        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\FileSyst
        em PSIsContainer  : False
        Age               : 16
        VersionInfo       : File:             C:\WINDOWS\system32\WindowsPow...
                    InternalName:     POWERSHELL 
                    OriginalFilename: PowerShell.EXE 
        ...


      Vous pouvez également afficher la propriété Age du fichier à 
      l'aide de la commande suivante.

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

  Le code XML dans les fichiers Types.ps1xml

      La balise <Types> encadre tous les types définis dans le fichier.
      Il ne doit y avoir qu'une seule paire de balises <Types>.

      Chaque type .NET Framework figurant dans le fichier doit être 
      représenté par une paire de balises <Type>. 

      Les balises de type doivent contenir les balises suivantes :

          <Name> : Une paire de balises <Name> qui encadrent le nom du 
                   type .NET Framework.

          <Members> : Une paire de balises <Members> qui encadrent 
                      les balises des nouvelles propriétés et méthodes 
                      définies pour le type .NET Framework.

      Chacune des balises de membre suivantes peut figurer à 
      l'intérieur des balises <Members>.

      <AliasProperty> : Définit un nouveau nom pour une propriété existante.

         La balise <AliasProperty> doit comporter une paire de balises 
         <Name> qui spécifient le nom de la nouvelle propriété et une 
         paire de balises <ReferencedMemberName> qui spécifient la 
         propriété existante. 

         Par exemple, la propriété d'alias Count est un alias pour la 
         propriété Length d'objets tableau.

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


      <CodeMethod> : Référence une méthode statique d'une classe .NET Framework.

         La balise <CodeMethod> doit comporter une paire de balises 
         <Name> qui spécifient le nom de la nouvelle méthode et une 
         paire de balises <GetCodeReference> qui spécifient le code 
         dans lequel la méthode est définie. 

         Par exemple, la propriété Mode des répertoires (objets 
         System.IO.DirectoryInfo) est une propriété de code définie 
         dans le fournisseur FileSystem de Windows PowerShell.
        
             <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> : Référence une méthode statique d'une classe 
      .NET Framework.

         La balise <CodeProperty> doit comporter une paire de balises 
         <Name> qui spécifient le nom de la nouvelle propriété et une 
         paire de balises <GetCodeReference> qui spécifient le code 
         dans lequel la propriété est définie. 
         Par exemple, la propriété Mode des répertoires (objets 
         System.IO.DirectoryInfo) est une propriété de code définie 
         dans le fournisseur FileSystem de Windows PowerShell.
             <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> : Définit une collection de membres (propriétés et méthodes). 

         Les balises <MemberSet> apparaissent dans les balises 
         <Members> principales. Elles doivent encadrer une paire de 
         balises <Name> qui entourent le nom du jeu de membres et une 
         paire de balises <Members> secondaires qui entourent les 
         membres (propriétés et méthodes) du jeu. Chacune des balises 
         qui créent une propriété (telle que <NoteProperty> ou 
         <ScriptProperty>) ou une méthode (telle que <Method> ou 
         <ScriptMethod>) peut être membre du jeu.

         Dans les fichiers Types.ps1xml, la balise <MemberSet> est 
         utilisée pour définir les affichages par défaut des objets 
         .NET Framework dans Windows PowerShell. Dans ce cas, le nom 
         du jeu de membres (valeur comprise entre les balises <Name>) 
         est toujours " PsStandardMembers ", et les propriétés 
         (valeurs de la balise <Name>) portent l'un des noms suivants :

	    - DefaultDisplayProperty : Propriété unique d'un objet.

            - DefaultDisplayPropertySet : Une ou plusieurs propriétés 
              d'un objet.

            - DefaultKeyPropertySet : Une ou plusieurs propriétés de 
              clé d'un objet. Une propriété de clé identifie les 
              instances de valeurs de propriété, telles que le numéro 
              d'identification des éléments contenus dans 
              l'historique d'une session.

         Par exemple, le code XML suivant définit l'affichage par 
         défaut des services (objets System.ServiceProcess.ServiceCont
         roller) qui sont retournés par l'applet de commande Get-Service. 
         Il définit un jeu de membres nommé " PsStandardMembers " 
         qui se compose d'un jeu de propriétés par défaut avec les 
         propriétés Status, Name et 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> : Référence une méthode native de l'objet sous-jacent. 

      <Methods> : Collection des méthodes de l'objet.

      <NoteProperty> : Définit une propriété ayant une valeur statique.

         La balise <NoteProperty> doit comporter une paire de balises 
         <Name> qui spécifient le nom de la nouvelle propriété et une 
         paire de balises <Value> qui spécifient la valeur de la 
         propriété.

         Par exemple, le code XML suivant crée une propriété Status 
         pour des répertoires (objets System.IO.DirectoryInfo). La 
         valeur de la propriété Status est toujours " Success ".

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


      <ParameterizedProperty> : Propriétés qui prennent des arguments 
                                et retournent une valeur.

      <Properties> : Collection des propriétés de l'objet.

      <Property> : Propriété de l'objet de base.

      <PropertySet> : Définit une collection des propriétés de l'objet.

         La balise <PropertySet> doit comporter une paire de balises 
         <Name> qui spécifient le nom du jeu de propriétés et une 
         paire de balises <ReferencedProperty> qui spécifient les 
         propriétés. Les noms des propriétés sont placés dans des 
         paires de balises <Name>. 

         Dans Types.ps1xml, les balises <PropertySet> sont utilisées 
         pour définir des jeux de propriétés pour l'affichage par 
         défaut d'un objet. La valeur " PsStandardMembers " dans la 
         balise <Name> d'une balise <MemberSet> vous permet 
         d'identifier les affichages par défaut.

         Par exemple, le code XML suivant crée une propriété Status 
         pour des répertoires (objets System.IO.DirectoryInfo). La 
         valeur de la propriété Status est toujours " 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> : Définit une méthode dont la valeur est la 
     sortie d'un script.

         La balise <ScriptMethod> doit avoir une paire de balises 
         <Name> qui spécifient le nom de la nouvelle méthode et une 
         paire de balises <Script> qui encadrent le bloc de script 
         retournant le résultat de la méthode. 

         Par exemple, les méthodes ConvertToDateTime et ConvertFromDateTime 
         d'objets de gestion (System.System.Management.ManagementObject) 
         sont des méthodes de script qui utilisent les méthodes statiques 
         ToDmtfDateTime et ToDateTime de la classe 
         System.Management.ManagementDateTimeConverter. 

             <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> : Définit une propriété dont la valeur est la 
                         sortie d'un script.

         La balise <ScriptProperty> doit avoir une paire de balises 
         <Name> qui spécifient le nom de la nouvelle propriété et une 
         paire de balises <GetScriptBlock> qui encadrent le bloc de 
         script retournant la valeur de la propriété.

         Par exemple, la propriété VersionInfo des fichiers (objets 
         System.IO.FileInfo) est une propriété de script qui résulte 
         de l'utilisation de la propriété FullName de la méthode 
         statique GetVersionInfo d'objets System.Diagnostics.FileVersi
         onInfo.

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


      Pour plus d'informations, consultez le Kit de développement 
      logiciel (SDK) Windows PowerShell dans MSDN (Microsoft 
      Developer Network) Library à l'adresse 
      https://go.microsoft.com/fwlink/?LinkId=144538.


  Update-TypeData
    
      Pour charger vos fichiers Types.ps1xml dans une console Windows 
      PowerShell, utilisez l'applet de commande Update-TypeData. Si 
      vous voulez que les types de votre fichier soient prioritaires 
      sur les types du fichier intégré Types.ps1xml, utilisez le 
      paramètre PrependData de l'applet de commande Update-TypeData. 
      Update-TypeData affecte uniquement la console actuelle. Pour 
      appliquer la modification à toutes les futures consoles, 
      exportez la console ou ajoutez la commande Update-TypeData à 
      votre profil Windows PowerShell.


  Signature d'un fichier Types.ps1xml

      Pour protéger les utilisateurs de votre fichier Types.ps1xml, 
      vous pouvez signer le fichier à l'aide d'une signature 
      numérique. Pour plus d'informations, consultez about_Signing.
    	

VOIR AUSSI
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData




Table des matières