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