about_Format.ps1xml

Breve descrizione

A partire da PowerShell 6, le visualizzazioni predefinite per gli oggetti sono definite nel codice sorgente di PowerShell.

È possibile creare file personalizzati Format.ps1xml per modificare la visualizzazione degli oggetti o definire le visualizzazioni predefinite per i nuovi tipi di oggetto creati in PowerShell.

Descrizione lunga

A partire da PowerShell 6, le visualizzazioni predefinite sono definite nel codice sorgente di PowerShell. I Format.ps1xml file di PowerShell 5.1 e versioni precedenti non esistono in PowerShell 6 e versioni successive.

Il codice sorgente di PowerShell definisce la visualizzazione predefinita di oggetti nella console di PowerShell. È possibile creare file personalizzati Format.ps1xml per modificare la visualizzazione degli oggetti o definire le visualizzazioni predefinite per i nuovi tipi di oggetto creati in PowerShell.

Quando PowerShell visualizza un oggetto, usa i dati nei file di formattazione strutturati per determinare la visualizzazione predefinita dell'oggetto. I dati nei file di formattazione determinano se l'oggetto viene eseguito il rendering in una tabella o in un elenco e determina quali proprietà vengono visualizzate per impostazione predefinita.

La formattazione influisce solo sulla visualizzazione. Non influisce sulle proprietà dell'oggetto passate dalla pipeline o dal modo in cui vengono passate. Format.ps1xml i file non possono essere usati per personalizzare il formato di output per le tabelle hash.

Un .ps1xml file di formattazione può definire quattro visualizzazioni diverse di ogni oggetto:

  • Tabella
  • Elenco
  • Largo
  • Personalizzato

Ad esempio, quando l'output di un comando viene inviato tramite pipe a un Get-ChildItemFormat-List comando, Format-List usa la visualizzazione elenco definita nel codice sorgente per determinare come visualizzare gli oggetti file e cartelle come elenco.

Quando un file di formattazione include più visualizzazioni di un oggetto, PowerShell applica la prima visualizzazione trovata.

In un file personalizzato Format.ps1xml viene definita da un set di tag XML che descrivono il nome della visualizzazione, il tipo di oggetto a cui può essere applicato, le intestazioni di colonna e le proprietà visualizzate nel corpo della visualizzazione. Il formato nei Format.ps1xml file viene applicato subito prima che i dati vengano presentati all'utente.

Creazione di nuovi file Format.ps1xml

Per modificare il formato di visualizzazione di una visualizzazione oggetto esistente o per aggiungere visualizzazioni per nuovi oggetti, creare file personalizzati Format.ps1xml e quindi aggiungerli alla sessione di PowerShell.

Per creare un Format.ps1xml file per definire una visualizzazione personalizzata, usare i cmdlet Get-FormatData ed Export-FormatData. Usare un editor di testo per modificare il file. Il file può essere salvato in qualsiasi directory a cui PowerShell può accedere, ad esempio una sottodirectory di $HOME.

Per modificare la formattazione di una visualizzazione corrente, individuare la visualizzazione nel file di formattazione e quindi usare i tag per modificare la visualizzazione. Per creare una visualizzazione per un nuovo tipo di oggetto, creare una nuova visualizzazione o usare una visualizzazione esistente come modello. I tag sono descritti nella sezione successiva. È quindi possibile eliminare tutte le altre visualizzazioni nel file in modo che le modifiche siano ovvie a chiunque esamini il file.

Dopo aver salvato le modifiche, usare Update-FormatData per aggiungere il nuovo file alla sessione di PowerShell. Se si vuole che la visualizzazione prenda la precedenza su una vista definita nei file predefiniti, usare il parametro PrependPath . Update-FormatData influisce solo sulla sessione corrente. Per apportare la modifica a tutte le sessioni future, aggiungere il Update-FormatData comando al profilo di PowerShell.

Esempio: Aggiungere dati del calendario agli oggetti cultura

In questo esempio viene illustrato come modificare la formattazione degli oggetti cultura System.Globalization.CultureInfo generati dal Get-Culture cmdlet nella sessione di PowerShell corrente. I comandi nell'esempio aggiungono la proprietà Calendar alla visualizzazione tabella predefinita degli oggetti cultura.

Per iniziare, ottenere i dati di formato dal file di codice sorgente e creare un Format.ps1xml file contenente la visualizzazione corrente degli oggetti cultura.

Get-FormatData -TypeName System.Globalization.CultureInfo |
  Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml

Aprire il CultureInfo.Format.ps1xml file in qualsiasi editor XML o di testo, ad esempio Visual Studio Code. Il codice XML seguente definisce le visualizzazioni dell'oggetto CultureInfo .

Il CultureInfo.Format.ps1xml file dovrebbe essere simile all'esempio seguente:

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <ViewDefinitions>
    <View>
      <Name>System.Globalization.CultureInfo</Name>
      <ViewSelectedBy>
        <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>

Creare una nuova colonna per la proprietà Calendar aggiungendo un nuovo set di <TableColumnHeader> tag. Il valore della proprietà Calendar può essere lungo, quindi specificare un valore di 45 caratteri come <Width>.

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

Aggiungere un nuovo elemento di colonna per Calendar nelle righe della tabella usando i <TableColumnItem> tag e <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>

Salvare e chiudere il file. Usare Update-FormatData per aggiungere il nuovo file di formato alla sessione di PowerShell corrente.

In questo esempio viene usato il parametro PrependPath per inserire il nuovo file in un ordine di precedenza superiore rispetto al file originale. Per altre informazioni, vedere Update-FormatData.

Update-FormatData -PrependPath $HOME\Format\CultureInfo.Format.ps1xml

Per testare la modifica, digitare Get-Culture e esaminare l'output che include la proprietà Calendar .

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

XML nei file Format.ps1xml

La definizione completa dello schema è disponibile in Format.xsd nel repository del codice sorgente di PowerShell in GitHub.

La sezione ViewDefinitions di ogni Format.ps1xml file contiene i <View> tag che definiscono ogni visualizzazione. Un tag tipico <View> include i tag seguenti:

  • <Name> identifica il nome della vista.
  • <ViewSelectedBy> specifica il tipo di oggetto o i tipi a cui si applica la visualizzazione.
  • <GroupBy> specifica il modo in cui gli elementi nella visualizzazione verranno combinati in gruppi.
  • <TableControl>, <ListControl>, <WideControl>e <CustomControl> contengono i tag che specificano la modalità di visualizzazione di ogni elemento.

Tag ViewSelectedBy

Il <ViewSelectedBy> tag può contenere un <TypeName> tag per ogni tipo di oggetto a cui si applica la visualizzazione. In alternativa, può contenere un tag che fa riferimento a un <SelectionSetName> set di selezione definito altrove usando un <SelectionSet> tag.

Tag GroupBy

Il <GroupBy> tag contiene un <PropertyName> tag che specifica la proprietà dell'oggetto per cui raggruppare gli elementi. Contiene anche un <Label> tag che specifica una stringa da usare come etichetta per ogni gruppo o <CustomControlName> un tag che fa riferimento a un controllo personalizzato definito altrove usando un <Control> tag. Il <Control> tag contiene un tag e un <Name><CustomControl> tag.

TableControlTag

Il <TableControl> tag in genere contiene <TableHeaders> e <TableRowEntries> tag che definiscono la formattazione per le teste e le righe della tabella. Il <TableHeaders> tag contiene <TableColumnHeader> in genere tag che contengono <Label>tag , <Width>e <Alignment> . Il <TableRowEntries> tag contiene <TableRowEntry> tag per ogni riga della tabella. Il <TableRowEntry> tag contiene un tag contenente un <TableColumnItems><TableColumnItem> tag per ogni colonna della riga. In genere, il <TableColumnItem> tag contiene un <PropertyName> tag che identifica la proprietà dell'oggetto da visualizzare nel percorso definito o un tag contenente codice script che calcola un <ScriptBlock> risultato da visualizzare nella posizione.

Nota

I blocchi di script possono essere usati anche altrove nelle posizioni in cui i risultati calcolati possono essere utili.

Il <TableColumnItem> tag può anche contenere un <FormatString> tag che specifica come verrà visualizzata la proprietà o i risultati calcolati.

Tag ListControl

Il <ListControl> tag contiene in genere un <ListEntries> tag. Il <ListEntries> tag contiene un <ListEntry> tag. Il <ListEntry> tag contiene un <ListItems> tag. Il <ListItems> tag contiene <ListItem> tag che contengono <PropertyName> tag. I <PropertyName> tag specificano la proprietà dell'oggetto da visualizzare nella posizione specificata nell'elenco. Se la selezione della visualizzazione viene definita usando un set di selezione, i <ListControl> tag e <ListEntry> possono contenere anche un <EntrySelectedBy> tag contenente uno o più <TypeName> tag. Questi <TypeName> tag specificano il tipo di oggetto che il <ListControl> tag deve essere visualizzato.

Tag WideControl

Il <WideControl> tag contiene in genere un <WideEntries> tag. Il <WideEntries> tag contiene uno o più <WideEntry> tag. Un <WideEntry> tag contiene un <WideItem> tag.

Un <WideItem> tag deve includere un tag o un <PropertyName><ScriptBlock> tag. Un <PropertyName> tag specifica la proprietà da visualizzare nella posizione specificata nella visualizzazione. Un <ScriptBlock> tag specifica uno script da valutare e visualizzare nella posizione specificata nella visualizzazione.

Un <WideItem> tag può contenere un <FormatString> tag che specifica come visualizzare la proprietà.

Tag CustomControl

Il <CustomControl> tag consente di usare un blocco di script per definire un formato. Un <CustomControl> tag contiene in genere un <CustomEntries> tag contenente più <CustomEntry> tag. Ogni <CustomEntry> tag contiene un <CustomItem> tag che può contenere un'ampia gamma di tag che specificano il contenuto e la formattazione della posizione specificata nella visualizzazione, tra <Text>cui , <Indentation><ExpressionBinding>, e <NewLine> tag.

Uso del file Format.ps1xml di traccia

Per rilevare gli errori nel caricamento o nell'applicazione di file, usare il Trace-Command cmdlet con uno dei componenti di Format.ps1xml formato seguenti come valore del parametro Name:

  • FormatFileLoading
  • FormatViewBinding

Per altre informazioni, vedere Trace-Command e Get-TraceSource.

Firma di un file Format.ps1xml

Per proteggere gli utenti del Format.ps1xml file, firmare il file usando una firma digitale. Per altre informazioni, vedere about_Signing.

XML di esempio per una visualizzazione personalizzata Format-Table

L'esempio XML seguente crea una Format-Table visualizzazione personalizzata per gli oggetti System.IO.DirectoryInfo e System.IO.FileInfo creati da Get-ChildItem. La vista personalizzata è denominata mygciview e aggiunge la colonna CreationTime alla tabella.

Per creare la visualizzazione personalizzata, usare i Get-FormatData cmdlet e Export-FormatData per generare un .ps1xml file. Modificare quindi il .ps1xml file per creare il codice per la visualizzazione personalizzata. Il .ps1xml file può essere archiviato in qualsiasi directory a cui PowerShell può accedere. Ad esempio, una sottodirectory di $HOME.

Dopo aver creato il file, usare il .ps1xmlUpdate-FormatData cmdlet per includere la visualizzazione nella sessione di PowerShell corrente. In alternativa, aggiungere il comando di aggiornamento al profilo di PowerShell se è necessaria la visualizzazione disponibile in tutte le sessioni di PowerShell.

Per questo esempio, la visualizzazione personalizzata deve usare il formato della tabella, in caso contrario, Format-Table ha esito negativo.

Usare Format-Table con il parametro View per specificare il nome della vista personalizzata, mygciview e formattare l'output della tabella con la colonna CreationTime . Per un esempio di come viene eseguito il comando, vedere Format-Table.

Nota

Anche se è possibile ottenere il codice sorgente XML di formattazione per creare una visualizzazione personalizzata, è possibile che sia necessario uno sviluppo maggiore per ottenere il risultato desiderato.

Nel comando seguente Get-FormatData è disponibile un'alternativa per il parametro PowerShellVersion per assicurarsi che vengano restituite tutte le informazioni di formattazione locali. Usare -PowerShellVersion $PSVersionTable.PSVersion anziché una versione specifica di PowerShell.

Get-FormatData -PowerShellVersion 5.1 -TypeName System.IO.DirectoryInfo |
   Export-FormatData -Path ./Mygciview.Format.ps1xml
Update-FormatData -AppendPath ./Mygciview.Format.ps1xml
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <ViewDefinitions>
    <View>
      <Name>mygciview</Name>
      <ViewSelectedBy>
        <TypeName>System.IO.DirectoryInfo</TypeName>
        <TypeName>System.IO.FileInfo</TypeName>
      </ViewSelectedBy>
      <GroupBy>
        <PropertyName>PSParentPath</PropertyName>
      </GroupBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>Mode</Label>
            <Width>7</Width>
            <Alignment>Left</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>LastWriteTime</Label>
            <Width>26</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>CreationTime</Label>
            <Width>26</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>Length</Label>
            <Width>14</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>Name</Label>
            <Alignment>Left</Alignment>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <Wrap />
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>ModeWithoutHardLink</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>LastWriteTime</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>CreationTime</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>Length</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>Name</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>

Vedi anche