about_Format.ps1xml

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TEMA

about_Format.ps1xml

DESCRIPCIÓN BREVE

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

DESCRIPCIÓN LARGA

Los archivos Format.ps1xml de Windows PowerShell definen la visualización predeterminada de los objetos en Windows PowerShell. Puede crear sus propios archivos Format.ps1xml para cambiar la visualización de los objetos o para definir el valor predeterminado que se muestra para los nuevos tipos de objetos que cree en Windows PowerShell.

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

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

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

Certificate.Format.ps1xml

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

DotNetTypes.Format.ps1xml

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

FileSystem.Format.ps1xml

Objetos del sistema de archivos, como archivos y directorios.

Help.Format.ps1xml

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

PowerShellCore.format.ps1xml

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

PowerShellTrace.format.ps1xml

Objetos de seguimiento, como los generados por el cmdlet Trace-Command.

Registry.format.ps1xml

Objetos del Registro, como claves y entradas.

Un archivo de formato puede definir cuatro vistas diferentes de cada objeto: tabla, lista, ancho y personalizado. Por ejemplo, cuando se canaliza la salida de un comando Get-ChildItem a un comando Format-List, Format-List usa la vista en el archivo FileSystem.format.ps1xml para determinar cómo se muestran los objetos de archivo y carpeta como una lista.

Cuando un formato de archivo incluye más de una vista de un objeto, Windows PowerShell se aplica a la primera vista que encuentre.

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

Creación de nuevos archivos Format.ps1xml

Los archivos. ps1xml que se instalan con Windows PowerShell están firmados digitalmente para evitar su manipulación, dado que el formato puede incluir bloques de script. Por lo tanto, para cambiar el formato de visualización de la vista de un objeto existente o para agregar vistas para los objetos nuevos, cree sus propios archivos Format.ps1xml y, a continuación, agréguelos a su sesión de Windows PowerShell.

Para crear un nuevo archivo, copie un archivo Format.ps1xml existente. El nuevo archivo puede tener cualquier nombre, pero la extensión de nombre de archivo debe ser .ps1xml. Puede colocar el nuevo archivo en cualquier directorio al que pueda acceder Windows PowerShell, pero es útil colocar los archivos en el directorio de instalación de Windows PowerShell ($pshome) o en un subdirectorio del directorio de instalación.

Para cambiar el formato de la 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 tipo de objeto nuevo, cree una vista nueva o use una vista existente como modelo. (Las etiquetas se describen en la siguiente sección de este tema). A continuación, puede eliminar todas las demás vistas del archivo para que los cambios sean evidentes para cualquiera que examine el archivo.

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

Ejemplo: Agregar datos de calendario a objetos de la cultura

Este ejemplo muestra cómo cambiar el formato de los objetos de la cultura (System.Globalization.CultureInfo) que genera el cmdlet Get-Culture. Los comandos del ejemplo agregan la propiedad de calendario a presentación en vista de tabla predeterminada de los objetos de la cultura.

El primer paso consiste en encontrar el archivo Format.ps1xml que contiene la vista actual de los objetos de la cultura. El comando Select-String siguiente encuentra el archivo:

  select-string -path $pshome\*format.ps1xml `
              -pattern System.Globalization.CultureInfo

Este comando revela que la definición se encuentra en el archivo DotNetTypes.Format.ps1xml.

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

  copy-item DotNetTypes.Format.ps1xml MyDotNetTypes.Format.ps1xml

A continuación, abra el archivo MyDotNetTypes.Format.ps1xml en cualquier editor de texto o XML, como el Bloc de notas. Busque la sección del objeto System.Globalization.CultureInfo. El código XML siguiente define las vistas del objeto CultureInfo. El objeto tiene solo 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>
                  <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 las etiquetas de cierre <ViewDefintions> y <Configuration>. También debe eliminar la firma digital cada vez que cambie el archivo.

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

A continuación, cree una nueva columna para la propiedad Calendar agregando un nuevo conjunto de etiquetas <TableColumnHeader>. El valor de la propiedad Calendar puede ser largo, por lo que se usa un valor de 45 caracteres, como sigue:

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

                        <TableColumnHeader/>
                    </TableHeaders>

Ahora, agregue un nuevo elemento de columna en las filas de la tabla, como sigue:

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

Después de guardar el archivo y cerrarlo, use un comando Update-FormatData, por ejemplo, el comando siguiente, para agregar el nuevo archivo de formato a la sesión actual. El comando usa el parámetro PrependData para colocar el nuevo archivo en un orden de prioridad más alto que el archivo original. (Para obtener más información acerca de Update-FormatData, escriba "get-help update formatdata").

  update-formatdata -prependpath $pshome\MyDotNetTypes.format.ps1xml

Para probar el cambio, escriba "get-culture" y, a continuación, revise la salida, que incluye la propiedad Calendar.

      C:\PS> get-culture

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

Código XML en archivos Format.ps1xml

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

<Name>

La etiqueta <Name> identifica el nombre de la vista.

<ViewSelectedBy>

La etiqueta <ViewSelectedBy> especifica el tipo o los tipos de objeto a los que se aplica la vista.

<GroupBy>

La etiqueta <GroupBy> especifica cómo se combinan en grupos los elementos de la vista.

<TableControl>

<ListControl>

<WideControl>

<CustomControl>

Estas etiquetas contienen las etiquetas que especifican cómo se mostrará cada elemento (<DefaultDisplayProperty>).

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

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

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

Nota: Los bloques de script también pueden usarse en cualquier otro lugar en ubicaciones donde los resultados calculados pueden ser útiles.

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

La etiqueta <ListControl> suele contener una etiqueta <ListEntries>. La etiqueta <ListEntries> contiene una etiqueta <ListItems>. La etiqueta <ListItems> contiene etiquetas <ListItem>, que contienen etiquetas <PropertyName>. Las etiquetas <PropertyName> especifican la propiedad de objeto que se mostrará en la ubicación especificada en la lista. Si la selección de vista se define mediante un conjunto de selección, la etiqueta <ListControl> también puede contener una etiqueta <EntrySelectedBy>, que contiene una o varias etiquetas <TypeName>. Estas etiquetas <TypeName> especifican el tipo de objeto que debe mostrar la etiqueta <ListControl>.

La etiqueta <WideControl> suele contener una etiqueta <WideEntries>. La etiqueta <WideEntries> contiene una o varias etiquetas <WideEntry>. Una etiqueta <WideEntry> suele contener una etiqueta <PropertyName> que especifica la propiedad que se mostrará en la ubicación especificada en la vista. La etiqueta <PropertyName> puede contener una etiqueta <FormatString> que especifica cómo se mostrará la propiedad.

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

Update-FormatData

Para cargar los archivos Format.ps1xml en una sesión de Windows PowerShell, use el cmdlet Update-FormatData. Si desea que las vistas del archivo tengan prioridad sobre las vistas del archivo Format.ps1xml integrado, use el parámetro PrependData de Update-FormatData. Update-FormatData solo afecta a la sesión actual. Para realizar el cambio en todas las sesiones futuras, agregue el comando Update-FormatData a su perfil de Windows PowerShell.

Visualizaciones predeterminadas en Types.ps1xml

Las visualizaciones predeterminadas de algunos tipos de objeto básicos se definen en el archivo Types.ps1xml en el directorio $pshome. Los nodos se denominan PsStandardMembers, y los subnodos usan una de las siguientes etiquetas:

<DefaultDisplayProperty>

<DefaultDisplayPropertySet>

<DefaultKeyPropertySet>

Para obtener más información, escriba el siguiente comando:

  get-help about_types.ps1xml

Seguimiento del uso del archivo Format.ps1xml

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

  FormatFileLoading
          UpdateFormatData
          FormatViewBinding

Para obtener más información, escriba los siguientes comandos:

          get-help trace-command
          get-help get-tracesource     

Firmar un archivo Format.ps1xml

Para proteger a los usuarios de su archivo Format.ps1xml, firme el archivo con una firma digital. Para más información, escriba:

          get-help about_signing

VEA TAMBIÉN

Update-FormatData

Trace-Command

Get-TraceSource