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