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