TEMA
about_Format.ps1xml
DESCRIPCIÓN BREVE
Los archivos Format.ps1xml de Windows PowerShell definen la
presentación predeterminada de los objetos en la consola de
Windows PowerShell. Puede crear sus propios archivos
Format.ps1xml para cambiar la presentación de objetos o definir
las presentaciones predeterminadas para los nuevos tipos de
objetos que se creen en Windows PowerShell.
DESCRIPCIÓN DETALLADA
Los archivos Format.ps1xml de Windows PowerShell definen la
presentación predeterminada de los objetos en Windows PowerShell.
Puede crear sus propios archivos Format.ps1xml para cambiar la
presentación de objetos o definir las presentaciones
predeterminadas para los nuevos tipos de objetos que se creen en
Windows PowerShell.
Cuando Windows PowerShell muestra un objeto, utiliza los datos de
los archivos de formato estructurados 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 también qué propiedades se muestran de forma
predeterminada.
El formato afecta únicamente a la presentación. No afecta a qué
propiedades de objeto se pasan por la canalización ni a cómo se pasan.
Windows 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:
Certificate.Format.ps1xml
Objetos del almacén de certificados, tales como
certificados X.509 y almacenes de certificados.
DotNetTypes.Format.ps1xml
Otros tipos de .NET Framework, tales como los objetos
CultureInfo, EventLogEntry y FileVersionInfo.
FileSystem.Format.ps1xml
Objetos del sistema de archivos, tales como archivos y
directorios.
Help.Format.ps1xml
Vistas de la Ayuda, tales como vistas detalladas y
completas, parámetros y ejemplos.
PowerShellCore.format.ps1xml
Objetos generados por cmdlets básicos de Windows
PowerShell, tales como Get-Member y Get-History.
PowerShellTrace.format.ps1xml
Objetos de seguimiento, tales como los generados por el
cmdlet Trace-Command.
Registry.format.ps1xml
Objetos del Registro, como las claves y entradas.
Un archivo de formato puede definir cuatro vistas diferentes de
cada objeto: tabla, lista, ancha y compleja. Por ejemplo, cuando
la salida de un comando Get-ChildItem se canaliza a un comando
Format-List, Format-List utiliza la vista del archivo
FileSystem.format.ps1xml para determinar cómo mostrar los objetos
de carpeta y archivo en formato de lista.
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 se puede aplicar, los encabezados de
columna y las propiedades que se muestran en la vista. El formato
de los archivos Format.ps1xml se aplica justo antes de que los
datos se presenten al usuario.
Crear archivos Format.ps1xml nuevos
Los archivos .ps1xml que se instalan con Windows PowerShell
están firmados digitalmente para evitar su alteración, porque
el formato puede incluir bloques de script. Por consiguiente,
para cambiar el formato de presentación de una vista de objeto
existente o para agregar vistas para nuevos objetos, 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
debe tener la extensión .ps1xml. Puede colocar el nuevo archivo
en cualquier directorio al que Windows PowerShell tenga acceso,
pero resulta ú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 una vista actual, busque la vista en
el archivo de formato y, a continuación, utilice las etiquetas
para cambiar la vista. Para crear una vista para un nuevo tipo
de objeto, cree una nueva vista o utilice una vista existente
como modelo. (Las etiquetas se describen en la próxima 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.
Una vez guardados los cambios, se utiliza el cmdlet
Update-FormatData para agregarlo a la sesión de Windows
PowerShell. Si desea que la vista tenga precedencia sobre una
vista definida en los archivos integrados, utilice el parámetro
PrependData del cmdlet Update-FormatData. Update-FormatData
afecta solamente a la sesión actual. Para realizar el cambio en
todas las sesiones futuras, agregue el comando Update-FormatData
al perfil de Windows PowerShell.
Ejemplo: Agregar datos de calendario a los 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 cmdlet Get-Culture.
Los comandos del ejemplo agregan la propiedad de calendario a
la presentación predeterminada de la vista de tabla de los
objetos de referencia cultural.
El primer paso consiste en buscar el archivo Format.ps1xml que
contiene la vista actual de los objetos de referencia cultural.
El comando Select-String siguiente busca 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 siguiente comando copia el contenido del archivo a un nuevo
archivo, MisTiposPuntoNet.Format.ps1xml.
copy-item DotNetTypes.Format.ps1xml MisTiposPuntoNet.Format.ps1xml
A continuación, abra el archivo MisTiposPuntoNet.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 solamente 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, salvo 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.Cult
ureInfo</TypeName>
<TypeName>System.Globalization.CultureInfo</Type
Name>
</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</Prope
rtyName>
</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
de tipo long, de modo que se utiliza 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, utilice un comando
Update-FormatData, como el siguiente, para agregar el nuevo
archivo de formato a la sesión actual. El comando utiliza el
parámetro PrependData para colocar el nuevo archivo en un orden
de precedencia mayor que el del archivo original. (Para obtener
más información sobre Update-FormatData, escriba "get-help
update-formatdata".)
update-formatdata -prependpath $pshome\MisTiposPuntoNet.format.ps1xml
Para probar el cambio, escriba "get-culture" y, a continuación,
revise el resultado, que incluye la propiedad Calendar.
C:\PS> get-culture
LCID Nombre Calendar DisplayName
---- ---- -------- -----------
3082 es-ES System.Globalization.GregorianCalendar Español (España)
Código XML en los archivos Format.ps1xml
La sección ViewDefinitions de cada archivo Format.ps1xml
contiene etiquetas <View> que definen cada vista. Una etiqueta
<View> típica incluye las etiquetas siguientes:
<Name>
La etiqueta <Name> identifica el nombre de la vista.
<ViewSelectedBy>
La etiqueta <ViewSelectedBy> especifica el tipo o los
tipos de objetos a los que se aplica la vista.
<GroupBy>
La etiqueta <GroupBy> especifica cómo se combinarán los
elementos de la vista en grupos.
<TableControl>
<ListControl>
<WideControl>
<ComplexControl>
Estas etiquetas contienen las etiquetas que especifican
cómo se mostrará cada elemento.
La etiqueta <ViewSelectedBy> puede contener una etiqueta
<TypeName> por cada tipo de objeto al que se aplique la vista.
O bien, puede contener una etiqueta <SelectionSetName> que hace
referencia a un conjunto de selección que se define en otra
parte mediante una etiqueta <SelectionSet>.
La etiqueta <GroupBy> contiene una etiqueta <PropertyName> que
especifica la propiedad del objeto según la que se van a
agrupar los elementos. También contiene una etiqueta <Label>
que especifica una cadena que se va a usar como etiqueta para
cada grupo, o una etiqueta <ComplexControlName> que hace
referencia a un control complejo definido en otro lugar
mediante una etiqueta <Control>. La etiqueta <Control> contiene
una etiqueta <Name> y una etiqueta <ComplexControl>.
La etiqueta <TableControl> contiene normalmente etiquetas
<TableHeaders> y <TableRowEntries> que definen el formato de
los encabezados y las filas de la tabla. La etiqueta
<TableHeaders> suele contener etiquetas <TableColumnHeader>
que, a su vez, contienen 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.
Por regla general, la etiqueta <TableColumnItem> contiene una
etiqueta <PropertyName> que identifica la propiedad del objeto
que se va a mostrar en la ubicación definida, o una etiqueta
<ScriptBlock> que contiene código de script que calcula un
resultado que se va a mostrar en la ubicación.
Nota: pueden usarse también bloques de script en otras
ubicaciones en las que los resultados calculados puedan ser útiles.
La etiqueta <TableColumnItem> también puede contener una
etiqueta <FormatString> que especifica cómo se van a mostrar 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 del objeto
que se va a mostrar en la ubicación especificada de la lista.
Si la selección de vista se define con un conjunto de
selección, la etiqueta <ListControl> también puede contener una
etiqueta <EntrySelectedBy> con 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 más
etiquetas <WideEntry>. Una etiqueta <WideEntry> suele contener
una etiqueta <PropertyName> que especifica la propiedad que se
va a mostrar en la ubicación especificada de la vista. La
etiqueta <PropertyName> puede contener una etiqueta
<FormatString> que especifica cómo se debe presentar la propiedad.
La etiqueta <ComplexControl> contiene combinaciones de
etiquetas más complejas que otros tipos de vistas. Una etiqueta
<ComplexControl> contiene normalmente una etiqueta
<ComplexEntries>. Una etiqueta <ComplexEntries> contiene varias
etiquetas <ComplexEntry>. Una etiqueta <ComplexEntry> contiene
normalmente una etiqueta <ComplexItem>. Esta etiqueta, a su
vez, puede contener varias etiquetas que especifican el
contenido y el formato para 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, se utiliza el cmdlet Update-FormatData. Si desea
que las vistas del archivo tengan prioridad sobre las vistas
del archivo Format.ps1xml integrado, utilice el parámetro
PrependData del cmdlet Update-FormatData. Update-FormatData
afecta solamente a la sesión actual. Para realizar el cambio en
todas las sesiones futuras, agregue el comando Update-FormatData
al perfil de Windows PowerShell.
Presentaciones predeterminadas en Types.ps1xml
Las presentaciones predeterminadas de algunos tipos de objetos
básicos se definen en el archivo Types.ps1xml en el directorio
$pshome. Los nodos se denominan PsStandardMembers y los
subnodos utilizan una de las etiquetas siguientes:
<DefaultDisplayProperty>
<DefaultDisplayPropertySet>
<DefaultKeyPropertySet>
Para obtener más información, escriba el comando siguiente:
get-help about_types.ps1xml
Realizar el seguimiento del uso de los archivos Format.ps1xml
Para detectar errores en la carga o aplicación de los archivos
Format.ps1xml, se utiliza el cmdlet Trace-Command con
cualquiera de los componentes de formato siguientes como valor
del parámetro Name:
FormatFileLoading
UpdateFormatData
FormatViewBinding
Para obtener más información, escriba los comandos siguientes:
get-help trace-command
get-help get-tracesource
Firmar archivos Format.ps1xml
Para proteger a los usuarios del archivo Format.ps1xml, debe
firmarse el archivo mediante una firma digital. Para obtener
más información, escriba:
get-help about_signing
VEA TAMBIÉN
Update-FormatData
Trace-Command
Get-TraceSource