about_Format.ps1xml

Description courte

Les Format.ps1xml fichiers de PowerShell définissent l’affichage par défaut des objets dans la console PowerShell. Vous pouvez créer vos propres Format.ps1xml fichiers pour modifier l’affichage des objets ou définir les affichages par défaut pour les nouveaux types d’objets que vous créez dans PowerShell.

Description longue

Les Format.ps1xml fichiers dans PowerShell définissent l’affichage par défaut des objets dans PowerShell. Vous pouvez créer vos propres Format.ps1xml fichiers pour modifier l’affichage des objets ou définir les affichages par défaut pour les nouveaux types d’objets que vous créez dans PowerShell.

Lorsque PowerShell affiche un objet, il utilise les données dans les fichiers de mise en forme structurée pour déterminer l’affichage par défaut de l’objet. Les données des fichiers de mise en forme déterminent si l’objet est rendu dans une table ou dans une liste, et détermine les propriétés affichées par défaut.

La mise en forme affecte l’affichage uniquement. Elle n’affecte pas les propriétés d’objet transmises au pipeline ou la façon dont elles sont passées. Format.ps1xml les fichiers ne peuvent pas être utilisés pour personnaliser le format de sortie des tables de hachage.

PowerShell inclut sept fichiers de mise en forme. Ces fichiers se trouvent dans le répertoire d’installation ($PSHOME). Chaque fichier définit l’affichage d’un groupe d’objets Microsoft .NET Framework :

  1. Certificate.Format.ps1xml

    Objets dans le magasin de certificats, tels que les certificats X.509 et les magasins de certificats.

  2. DotNetTypes.Format.ps1xml

    Autres types .NET Framework, tels que CultureInfo, FileVersionInfo et EventLogEntry.

  3. FileSystem.Format.ps1xml

    Objets de système de fichiers, tels que les fichiers et les répertoires.

  4. Help.Format.ps1xml

    Aidez les vues, telles que des vues détaillées et complètes, des paramètres et des exemples.

  5. PowerShellCore.Format.ps1xml

    Objets générés par les applets de commande principales PowerShell, telles que Get-Member et Get-History.

  6. PowerShellTrace.Format.ps1xml

    Objets de trace, tels que ceux générés par l’applet de Trace-Command commande.

  7. Registry.Format.ps1xml

    Objets de Registre, tels que les clés et les entrées.

Un fichier de mise en forme peut définir quatre vues différentes de chaque objet :

  • Table
  • List
  • Paysage
  • Personnalisée

Par exemple, lorsque la sortie d’une Get-ChildItem commande est redirigée vers une Format-List commande, Format-List utilise l’affichage dans le FileSystem.Format.ps1xml fichier pour déterminer comment afficher les objets de fichier et de dossier sous forme de liste.

Lorsqu’un fichier de mise en forme inclut plusieurs vues d’un objet, PowerShell applique la première vue qu’il trouve.

Dans un Format.ps1xml fichier, une vue est définie par un ensemble de balises XML qui décrivent le nom de la vue, le type d’objet auquel il peut être appliqué, les en-têtes de colonne et les propriétés affichées dans le corps de la vue. Le format dans les Format.ps1xml fichiers est appliqué juste avant que les données ne sont présentées à l’utilisateur.

Création de fichiers Format.ps1xml

Les .ps1xml fichiers installés avec PowerShell sont signés numériquement pour empêcher la falsification, car la mise en forme peut inclure des blocs de script. Pour modifier le format d’affichage d’une vue d’objet existante ou pour ajouter des vues pour de nouveaux objets, créez vos propres Format.ps1xml fichiers, puis ajoutez-les à votre session PowerShell.

Pour créer un fichier, copiez un fichier existant Format.ps1xml . Le nouveau fichier peut avoir n’importe quel nom, mais il doit avoir une .ps1xml extension de nom de fichier. Vous pouvez placer le nouveau fichier dans n’importe quel répertoire accessible à PowerShell, mais il est utile de placer les fichiers dans le répertoire d’installation de PowerShell ($PSHOME) ou dans un sous-répertoire du répertoire d’installation.

Pour modifier la mise en forme d’une vue active, recherchez l’affichage dans le fichier de mise en forme, puis utilisez les balises pour modifier l’affichage. Pour créer une vue pour un nouveau type d’objet, créez une vue ou utilisez une vue existante en tant que modèle. Les balises sont décrites dans la section suivante. Vous pouvez ensuite supprimer toutes les autres vues du fichier afin que les modifications soient évidentes pour toute personne examinant le fichier.

Après avoir enregistré les modifications, utilisez l’applet Update-FormatData de commande pour ajouter le nouveau fichier à votre session PowerShell. Si vous souhaitez que votre vue soit prioritaire sur une vue définie dans les fichiers intégrés, utilisez le paramètre PrependPath . Update-FormatData affecte uniquement la session active. Pour apporter la modification à toutes les sessions futures, ajoutez la Update-FormatData commande à votre profil PowerShell.

Exemple : Ajout de données de calendrier à des objets de culture

Cet exemple montre comment modifier la mise en forme des objets de culture System.Globalization.CultureInfo générés par l’applet Get-Culture de commande dans la session PowerShell actuelle. Les commandes de l’exemple ajoutent la propriété Calendar à l’affichage de table par défaut des objets de culture.

La première étape consiste à rechercher le Format.ps1xml fichier qui contient l’affichage actuel des objets de culture. La commande suivante Select-String recherche le fichier :

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.Globalization.CultureInfo"
}

Select-String @Parms
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:113:
     <Name>System.Globalization.CultureInfo</Name>
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:115:
<TypeName>System.Globalization.CultureInfo</TypeName>

Cette commande indique que la définition se trouve dans le DotNetTypes.Format.ps1xml fichier.

La commande suivante copie le contenu du fichier dans un nouveau fichier. MyDotNetTypes.Format.ps1xml

Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml

Ouvrez le MyDotNetTypes.Format.ps1xml fichier dans n’importe quel éditeur xml ou texte, tel que Visual Studio Code. Recherchez la section de l’objet System.Globalization.CultureInfo . Le code XML suivant définit les vues de l’objet CultureInfo . L’objet n’a qu’une vue TableControl .

<View>
  <Name>System.Globalization.CultureInfo</Name>
  <ViewSelectedBy>
    <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
    <TypeName>System.Globalization.CultureInfo</TypeName>
  </ViewSelectedBy>
  <TableControl>
    <TableHeaders>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <PropertyName>LCID</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Name</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>DisplayName</PropertyName>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
</View>

Supprimez le reste du fichier, à l’exception de l’ouverture <?xml>, <Configuration>des balises et <ViewDefinitions> des balises et de la fermeture <ViewDefinitions> et <Configuration> des balises. S’il existe une signature numérique, supprimez-la de votre fichier personnalisé Format.ps1xml.

Le MyDotNetTypes.Format.ps1xml fichier doit maintenant ressembler à l’exemple suivant :

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<ViewDefinitions>
<View>
  <Name>System.Globalization.CultureInfo</Name>
  <ViewSelectedBy>
    <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName>
    <TypeName>System.Globalization.CultureInfo</TypeName>
  </ViewSelectedBy>
  <TableControl>
    <TableHeaders>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
      <TableColumnHeader>
        <Width>16</Width>
      </TableColumnHeader>
      <TableColumnHeader/>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <PropertyName>LCID</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Name</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>DisplayName</PropertyName>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
</View>
</ViewDefinitions>
</Configuration>

Créez une colonne pour la propriété Calendar en ajoutant un nouvel ensemble de <TableColumnHeader> balises. La valeur de la propriété Calendar peut être longue. Spécifiez donc une valeur de 45 caractères en tant que <Width>.

<TableHeaders>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>45</Width>
  </TableColumnHeader>
  <TableColumnHeader/>
</TableHeaders>

Ajoutez un nouvel élément de colonne pour Calendar dans les lignes du tableau à l’aide des balises et <PropertyName des <TableColumnItem> balises :

<TableRowEntries>
  <TableRowEntry>
    <TableColumnItems>
      <TableColumnItem>
        <PropertyName>LCID</PropertyName>
      </TableColumnItem>
      <TableColumnItem>
        <PropertyName>Name</PropertyName>
      </TableColumnItem>
      <TableColumnItem>
        <PropertyName>Calendar</PropertyName>
      </TableColumnItem>
      <TableColumnItem>
        <PropertyName>DisplayName</PropertyName>
      </TableColumnItem>
    </TableColumnItems>
  </TableRowEntry>
</TableRowEntries>

Enregistrez le fichier et fermez-le. Permet Update-FormatData d’ajouter le nouveau fichier de format à la session PowerShell actuelle.

Cet exemple utilise le paramètre PrependPath pour placer le nouveau fichier dans un ordre de priorité supérieur à celui du fichier d’origine. Pour plus d’informations, consultez Update-FormatData.

Update-FormatData -PrependPath $PSHOME\MyDotNetTypes.Format.ps1xml

Pour tester la modification, tapez Get-Culture et passez en revue la sortie qui inclut la propriété Calendar .

Get-Culture
LCID Name  Calendar                               DisplayName
---- ----  --------                               -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)

Xml dans les fichiers Format.ps1xml

La définition complète du schéma se trouve dans Format.xsd dans le référentiel de code source PowerShell sur GitHub.

La section ViewDefinitions de chaque Format.ps1xml fichier contient les <View> balises qui définissent chaque vue. Une balise classique <View> inclut les balises suivantes :

  • <Name> identifie le nom de la vue.
  • <ViewSelectedBy> spécifie le type d’objet ou les types auxquels l’affichage s’applique.
  • <GroupBy> spécifie la façon dont les éléments de la vue seront combinés dans des groupes.
  • <TableControl>, <ListControl>, <WideControl>et <CustomControl> contiennent les balises qui spécifient la façon dont chaque élément sera affiché.

Balise ViewSelectedBy

La <ViewSelectedBy> balise peut contenir une <TypeName> balise pour chaque type d’objet auquel l’affichage s’applique. Il peut également contenir une <SelectionSetName> balise qui fait référence à un jeu de sélection défini ailleurs à l’aide d’une <SelectionSet> balise.

Balise GroupBy

La <GroupBy> balise contient une <PropertyName> balise qui spécifie la propriété d’objet par laquelle les éléments doivent être regroupés. Il contient également une <Label> balise qui spécifie une chaîne à utiliser comme étiquette pour chaque groupe ou une <CustomControlName> balise qui fait référence à un contrôle personnalisé défini ailleurs à l’aide d’une <Control> balise. La <Control> balise contient une <Name> balise et une <CustomControl> balise.

TableControlTag

La <TableControl> balise contient généralement et <TableRowEntries> étiquettes <TableHeaders> qui définissent la mise en forme des têtes et des lignes du tableau. La <TableHeaders> balise contient <TableColumnHeader> généralement des balises qui contiennent <Label>, <Width>et <Alignment> des balises. La <TableRowEntries> balise contient des <TableRowEntry> balises pour chaque ligne du tableau. La <TableRowEntry> balise contient une balise qui contient une <TableColumnItem><TableColumnItems> balise pour chaque colonne de la ligne. En règle générale, la <TableColumnItem> balise contient une <PropertyName> balise qui identifie la propriété d’objet à afficher à l’emplacement défini, ou une <ScriptBlock> balise qui contient du code de script qui calcule un résultat à afficher à l’emplacement.

Remarque

Les blocs de script peuvent également être utilisés ailleurs dans des emplacements où les résultats calculés peuvent être utiles.

La <TableColumnItem> balise peut également contenir une <FormatString> balise qui spécifie la façon dont la propriété ou les résultats calculés seront affichés.

Balise ListControl

La <ListControl> balise contient généralement une <ListEntries> balise. La <ListEntries> balise contient une <ListEntry> balise. La <ListEntry> balise contient une <ListItems> balise. La <ListItems> balise contient <ListItem> des balises, qui contiennent des <PropertyName> balises. Les <PropertyName> balises spécifient la propriété d’objet à afficher à l’emplacement spécifié dans la liste. Si la sélection d’affichage est définie à l’aide d’un jeu de sélection, les <ListControl><ListEntry> balises peuvent également contenir une <EntrySelectedBy> balise contenant une ou plusieurs <TypeName> balises. Ces <TypeName> balises spécifient le type d’objet que la <ListControl> balise est destinée à afficher.

Balise WideControl

La <WideControl> balise contient généralement une <WideEntries> balise. La <WideEntries> balise contient une ou plusieurs <WideEntry> balises. Une <WideEntry> balise contient une <WideItem> balise.

Une <WideItem> balise doit inclure une <PropertyName> balise ou une <ScriptBlock> balise. Une <PropertyName> balise spécifie la propriété à afficher à l’emplacement spécifié dans l’affichage. Une <ScriptBlock> balise spécifie un script à évaluer et à afficher à l’emplacement spécifié dans l’affichage.

Une <WideItem> balise peut contenir une <FormatString> balise qui spécifie comment afficher la propriété.

Balise CustomControl

La <CustomControl> balise vous permet d’utiliser un bloc de script pour définir un format. Une <CustomControl> balise contient généralement une <CustomEntries> balise qui contient plusieurs <CustomEntry> balises. Chaque <CustomEntry> balise contient une <CustomItem> balise qui peut contenir une variété d’étiquettes qui spécifient le contenu et la mise en forme de l’emplacement spécifié dans l’affichage, notamment <Text>, , <Indentation><ExpressionBinding>et <NewLine> les balises.

Affichages par défaut dans Types.ps1xml

Les affichages par défaut de certains types d’objets de base sont définis dans le Types.ps1xml fichier du $PSHOME répertoire. Les nœuds sont nommés PsStandardMembers et les sous-nœuds utilisent l’une des balises suivantes :

  • <DefaultDisplayProperty>
  • <DefaultDisplayPropertySet>
  • <DefaultKeyPropertySet>

Pour plus d’informations, consultez about_Types.ps1xml.

Utilisation du fichier Format.ps1xml de suivi

Pour détecter les erreurs dans le chargement ou l’application de fichiers, utilisez l’applet de Format.ps1xml commande avec l’un des composants de format suivants comme valeur du paramètre Name :Trace-Command

  • FormatFileLoading
  • FormatViewBinding

Pour plus d’informations, consultez Trace-Command et Get-TraceSource.

Signature d’un fichier Format.ps1xml

Pour protéger les utilisateurs de votre Format.ps1xml fichier, signez le fichier à l’aide d’une signature numérique. Pour plus d’informations, consultez about_Signing.

Exemple DE CODE XML pour une vue personnalisée Format-Table

L’exemple suivant crée une Format-Table vue personnalisée pour les objets System.IO.DirectoryInfo et System.IO.FileInfo créés par Get-ChildItem. La vue personnalisée est nommée mygciview et ajoute la colonne CreationTime à la table.

La vue personnalisée est créée à partir d’une version modifiée du FileSystem.Format.ps1xml fichier stocké dans $PSHOME PowerShell 5.1.

Une fois votre fichier personnalisé .ps1xml enregistré, utilisez Update-FormatData cette option pour inclure la vue dans une session PowerShell. Pour cet exemple, l’affichage personnalisé doit utiliser le format de tableau, sinon, Format-Table échoue.

Utilisez Format-Table le paramètre View pour spécifier le nom de la vue personnalisée et mettre en forme la sortie de la table. Pour obtenir un exemple de l’exécution de la commande, consultez Format-Table.

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.IO.DirectoryInfo"
}
Select-String @Parms
Copy-Item $PSHome\FileSystem.format.ps1xml .\MyFileSystem.Format.ps1xml
Update-FormatData -PrependPath $PSHOME\Format\MyFileSystem.Format.ps1xml

Remarque

Pour ajuster l’exemple XML dans les limitations de largeur de ligne, il était nécessaire de compresser une mise en retrait et d’utiliser des sauts de ligne dans le code.

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <SelectionSets>
        <SelectionSet>
            <Name>FileSystemTypes</Name>
            <Types>
                <TypeName>System.IO.DirectoryInfo</TypeName>
                <TypeName>System.IO.FileInfo</TypeName>
            </Types>
        </SelectionSet>
    </SelectionSets>
<Controls>
<Control>
<Name>FileSystemTypes-GroupingFormat</Name>
<CustomControl>
 <CustomEntries>
  <CustomEntry>
    <CustomItem>
    <Frame>
    <LeftIndent>4</LeftIndent>
    <CustomItem>
    <Text AssemblyName="System.Management.Automation"
    BaseName="FileSystemProviderStrings"
    ResourceId="DirectoryDisplayGrouping"/>
    <ExpressionBinding>
     <ScriptBlock>
      $_.PSParentPath.Replace("Microsoft.PowerShell.Core\FileSystem::", "")
     </ScriptBlock>
    </ExpressionBinding>
    <NewLine/>
    </CustomItem>
    </Frame>
    </CustomItem>
    </CustomEntry>
 </CustomEntries>
</CustomControl>
</Control>
</Controls>
<ViewDefinitions>
    <View>
    <Name>mygciview</Name>
    <ViewSelectedBy>
        <SelectionSetName>FileSystemTypes</SelectionSetName>
    </ViewSelectedBy>
    <GroupBy>
      <PropertyName>PSParentPath</PropertyName>
      <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
    </GroupBy>
        <TableControl>
            <TableHeaders>
                <TableColumnHeader>
                    <Label>Mode</Label>
                    <Width>7</Width>
                    <Alignment>left</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>LastWriteTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>CreationTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>Length</Label>
                    <Width>14</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader/>
            </TableHeaders>
            <TableRowEntries>
                <TableRowEntry>
                    <Wrap/>
                    <TableColumnItems>
                        <TableColumnItem>
                            <PropertyName>Mode</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.LastWriteTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.CreationTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                        <PropertyName>Length</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>Name</PropertyName>
                        </TableColumnItem>
                    </TableColumnItems>
                </TableRowEntry>
            </TableRowEntries>
        </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>

Voir aussi