Compartir a través de


about_Format.ps1xml

Descripción breve

Los Format.ps1xml archivos de PowerShell definen la presentación predeterminada de objetos en la consola de PowerShell. Puede crear sus propios Format.ps1xml archivos para cambiar la presentación de objetos o definir pantallas predeterminadas para los nuevos tipos de objetos que cree en PowerShell.

Descripción larga

Los Format.ps1xml archivos de PowerShell definen la presentación predeterminada de objetos en PowerShell. Puede crear sus propios Format.ps1xml archivos para cambiar la presentación de objetos o definir pantallas predeterminadas para los nuevos tipos de objetos que cree en PowerShell.

Cuando PowerShell muestra un objeto, usa los datos en archivos de formato estructurado para determinar la presentación predeterminada del objeto. Los datos de los archivos de formato determinan si el objeto se representa en una tabla o en una lista, y determina qué propiedades se muestran de forma predeterminada.

El formato solo afecta a la presentación. No afecta a qué propiedades de objeto se pasan por la canalización o cómo se pasan. Format.ps1xml Los archivos no se pueden usar para personalizar el formato de salida de las tablas hash.

PowerShell incluye siete archivos de formato. Estos archivos se encuentran en el directorio de instalación ($PSHOME). Cada archivo define la presentación de un grupo de objetos de Microsoft .NET Framework:

  1. Certificate.Format.ps1xml

    Objetos del almacén de certificados, como certificados X.509 y almacenes de certificados.

  2. DotNetTypes.Format.ps1xml

    Otros tipos de .NET Framework, como los objetos CultureInfo, FileVersionInfo y EventLogEntry.

  3. FileSystem.Format.ps1xml

    Objetos del sistema de archivos, como archivos y directorios.

  4. Help.Format.ps1xml

    Vistas de ayuda, como vistas detalladas y completas, parámetros y ejemplos.

  5. PowerShellCore.Format.ps1xml

    Objetos generados por cmdlets principales de PowerShell, como Get-Member y Get-History.

  6. PowerShellTrace.Format.ps1xml

    Seguimiento de objetos, como los generados por el Trace-Command cmdlet .

  7. Registry.Format.ps1xml

    Objetos del Registro, como claves y entradas.

Un archivo de formato puede definir cuatro vistas diferentes de cada objeto:

  • Tabla
  • List
  • Ancho
  • Personalizado

Por ejemplo, cuando la salida de un Get-ChildItem comando se canaliza a un Format-List comando, Format-List usa la vista en el FileSystem.Format.ps1xml archivo para determinar cómo mostrar los objetos de archivo y carpeta como una lista.

Cuando un archivo de formato incluye más de una vista de un objeto, PowerShell aplica la primera vista que encuentra.

En un Format.ps1xml archivo, una vista se define mediante un conjunto de etiquetas XML que describen el nombre de la vista, el tipo de objeto al que se puede aplicar, los encabezados de columna y las propiedades que se muestran en el cuerpo de la vista. El formato en Format.ps1xml los archivos se aplica justo antes de que se presenten los datos al usuario.

Crear nuevos archivos Format.ps1xml

Los .ps1xml archivos instalados con PowerShell están firmados digitalmente para evitar alteraciones, ya que el formato puede incluir bloques de script. Para cambiar el formato de presentación de una vista de objeto existente o agregar vistas para nuevos objetos, cree sus propios Format.ps1xml archivos y, a continuación, agréguelos a la sesión de PowerShell.

Para crear un nuevo archivo, copie un archivo existente Format.ps1xml . El nuevo archivo puede tener cualquier nombre, pero debe tener una .ps1xml extensión de nombre de archivo. Puede colocar el nuevo archivo en cualquier directorio accesible para PowerShell, pero resulta útil colocar los archivos en el directorio de instalación de PowerShell ($PSHOME) o en un subdirectorio del directorio de instalación.

Para cambiar el formato de una vista actual, busque la vista en el archivo de formato y, a continuación, use las etiquetas para cambiar la vista. Para crear una vista para un nuevo tipo de objeto, cree una nueva vista o use una vista existente como modelo. Las etiquetas se describen en la sección siguiente. A continuación, puede eliminar todas las demás vistas del archivo para que los cambios sean obvios para cualquier persona que examine el archivo.

Después de guardar los cambios, use el Update-FormatData cmdlet para agregar el nuevo archivo a la sesión de PowerShell. Si desea que la vista tenga prioridad sobre una vista definida en los archivos integrados, use el parámetro PrependPath . Update-FormatData afecta solo a la sesión actual. Para realizar el cambio en todas las sesiones futuras, agregue el Update-FormatData comando al perfil de PowerShell.

Ejemplo: Adición de datos de calendario a objetos de referencia cultural

En este ejemplo se muestra cómo cambiar el formato de los objetos de referencia cultural System.Globalization.CultureInfo generados por el Get-Culture cmdlet en la sesión actual de PowerShell. Los comandos del ejemplo agregan la propiedad Calendar a la visualización de la vista de tabla predeterminada de los objetos de referencia cultural.

El primer paso es buscar el Format.ps1xml archivo que contiene la vista actual de los objetos de referencia cultural. El siguiente Select-String comando busca el archivo:

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

Este comando revela que la definición está en el DotNetTypes.Format.ps1xml archivo.

El siguiente comando copia el contenido del archivo en un nuevo archivo, MyDotNetTypes.Format.ps1xml.

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

Abra el MyDotNetTypes.Format.ps1xml archivo en cualquier editor de texto o XML, como Visual Studio Code. Busque la sección de objetos System.Globalization.CultureInfo . El siguiente XML define las vistas del objeto CultureInfo . El objeto solo tiene una vista 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>

Elimine el resto del archivo, excepto las etiquetas de apertura <?xml>, <Configuration>, y <ViewDefinitions> y el cierre <ViewDefinitions> y <Configuration> las etiquetas . Si hay una firma digital, elimínela del archivo personalizado Format.ps1xml.

El MyDotNetTypes.Format.ps1xml archivo debería tener ahora un aspecto similar al del ejemplo siguiente:

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

Cree una nueva columna para la propiedad Calendar agregando un nuevo conjunto de <TableColumnHeader> etiquetas. El valor de la propiedad Calendar puede ser largo, por lo que especifique un valor de 45 caracteres como <Width>.

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

Agregue un nuevo elemento de columna para Calendar en las filas de la tabla mediante las <TableColumnItem> etiquetas y <PropertyName :

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

Guarde y cierre el archivo. Use Update-FormatData para agregar el nuevo archivo de formato a la sesión actual de PowerShell.

En este ejemplo se usa el parámetro PrependPath para colocar el nuevo archivo en un orden de prioridad mayor que el archivo original. Para obtener más información, vea Update-FormatData.

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

Para probar el cambio, escriba Get-Culture y revise la salida que incluye la propiedad Calendar .

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

Xml en archivos Format.ps1xml

La definición de esquema completa se puede encontrar en Format.xsd en el repositorio de código fuente de PowerShell en GitHub.

La sección ViewDefinitions de cada Format.ps1xml archivo contiene las <View> etiquetas que definen cada vista. Una etiqueta típica <View> incluye las siguientes etiquetas:

  • <Name> identifica el nombre de la vista.
  • <ViewSelectedBy> especifica el tipo de objeto o los tipos a los que se aplica la vista.
  • <GroupBy> especifica cómo se combinarán los elementos de la vista en grupos.
  • <TableControl>, <ListControl>, <WideControl>y <CustomControl> contienen las etiquetas que especifican cómo se mostrará cada elemento.

Etiqueta ViewSelectedBy

La <ViewSelectedBy> etiqueta puede contener una <TypeName> etiqueta para cada tipo de objeto al que se aplica la vista. O bien, puede contener una <SelectionSetName> etiqueta que haga referencia a un conjunto de selección definido en otro lugar mediante una <SelectionSet> etiqueta .

Etiqueta GroupBy

La <GroupBy> etiqueta contiene una <PropertyName> etiqueta que especifica la propiedad de objeto por la que se van a agrupar los elementos. También contiene una <Label> etiqueta que especifica una cadena que se va a usar como etiqueta para cada grupo o una <CustomControlName> etiqueta que hace referencia a un control personalizado definido en otro lugar mediante una <Control> etiqueta. La <Control> etiqueta contiene una <Name> etiqueta y una <CustomControl> etiqueta.

TableControlTag

La <TableControl> etiqueta normalmente contiene <TableHeaders> etiquetas y <TableRowEntries> que definen el formato de las filas y los encabezados de la tabla. La <TableHeaders> etiqueta normalmente contiene <TableColumnHeader> etiquetas que contienen <Label>etiquetas , <Width>y <Alignment> . La <TableRowEntries> etiqueta contiene <TableRowEntry> etiquetas para cada fila de la tabla. La <TableRowEntry> etiqueta contiene una <TableColumnItems> etiqueta que contiene una <TableColumnItem> etiqueta para cada columna de la fila. Normalmente, la <TableColumnItem> etiqueta contiene una <PropertyName> etiqueta que identifica la propiedad de objeto que se va a mostrar en la ubicación definida o una <ScriptBlock> etiqueta que contiene código de script que calcula un resultado que se va a mostrar en la ubicación.

Nota:

Los bloques de script también se pueden usar en otras ubicaciones en las que los resultados calculados pueden ser útiles.

La <TableColumnItem> etiqueta también puede contener una <FormatString> etiqueta que especifica cómo se mostrará la propiedad o los resultados calculados.

Etiqueta ListControl

La <ListControl> etiqueta normalmente contiene una <ListEntries> etiqueta. La <ListEntries> etiqueta contiene una <ListEntry> etiqueta. La <ListEntry> etiqueta contiene una <ListItems> etiqueta. La <ListItems> etiqueta contiene <ListItem> etiquetas, que contienen <PropertyName> etiquetas. Las <PropertyName> etiquetas especifican la propiedad de objeto que se va a mostrar en la ubicación especificada de la lista. Si la selección de vista se define mediante un conjunto de selección, las <ListControl> etiquetas y <ListEntry> también pueden contener una <EntrySelectedBy> etiqueta que contenga una o varias <TypeName> etiquetas. Estas <TypeName> etiquetas especifican el tipo de objeto que la <ListControl> etiqueta está pensada para mostrarse.

Etiqueta WideControl

La <WideControl> etiqueta normalmente contiene una <WideEntries> etiqueta. La <WideEntries> etiqueta contiene una o varias <WideEntry> etiquetas. Una <WideEntry> etiqueta contiene una <WideItem> etiqueta.

Una <WideItem> etiqueta debe incluir una <PropertyName> etiqueta o una <ScriptBlock> etiqueta. Una <PropertyName> etiqueta especifica la propiedad que se va a mostrar en la ubicación especificada de la vista. Una <ScriptBlock> etiqueta especifica un script para evaluar y mostrar en la ubicación especificada de la vista.

Una <WideItem> etiqueta puede contener una <FormatString> etiqueta que especifica cómo mostrar la propiedad.

Etiqueta CustomControl

La <CustomControl> etiqueta permite usar un bloque de script para definir un formato. Normalmente, una <CustomControl> etiqueta contiene una <CustomEntries> etiqueta que contiene varias <CustomEntry> etiquetas. Cada <CustomEntry> etiqueta contiene una <CustomItem> etiqueta que puede contener una variedad de etiquetas que especifican el contenido y el formato de la ubicación especificada en la vista, incluidas <Text>las etiquetas , <Indentation>, <ExpressionBinding>y <NewLine> .

Se muestra de forma predeterminada en Types.ps1xml

Las pantallas predeterminadas de algunos tipos de objetos básicos se definen en el Types.ps1xml archivo del $PSHOME directorio . Los nodos se denominan PsStandardMembers y los subnodos usan una de las siguientes etiquetas:

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

Para obtener más información, consulte about_Types.ps1xml.

Uso del archivo Format.ps1xml de seguimiento

Para detectar errores en la carga o aplicación de Format.ps1xml archivos, use el Trace-Command cmdlet con cualquiera de los siguientes componentes de formato como valor del parámetro Name :

  • FormatFileLoading
  • FormatViewBinding

Para obtener más información, vea Trace-Command y Get-TraceSource.

Firma de un archivo Format.ps1xml

Para proteger a los usuarios del Format.ps1xml archivo, firme el archivo mediante una firma digital. Para obtener más información, consulte about_Signing.

XML de ejemplo para una vista personalizada de tabla de formato

En el ejemplo siguiente se crea una Format-Table vista personalizada para los objetos System.IO.DirectoryInfo y System.IO.FileInfo creados por Get-ChildItem. La vista personalizada se denomina MyGciView y agrega la columna CreationTime a la tabla.

La vista personalizada se crea a partir de una versión editada del FileSystem.Format.ps1xml archivo almacenado en En $PSHOME PowerShell 5.1.

Una vez guardado el archivo personalizado .ps1xml , use Update-FormatData para incluir la vista en una sesión de PowerShell. En este ejemplo, la vista personalizada debe usar el formato de tabla; de lo contrario, Format-Table se produce un error.

Use Format-Table con el parámetro View para especificar el nombre de la vista personalizada y dar formato a la salida de la tabla. Para obtener un ejemplo de cómo se ejecuta el comando, vea 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

Nota:

Para ajustarse al ejemplo XML dentro de las limitaciones de ancho de línea, era necesario comprimir algunas sangrías y usar saltos de línea dentro del código.

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

Consulte también