Bagikan melalui


about_Format.ps1xml

Deskripsi singkat

File Format.ps1xml di PowerShell menentukan tampilan default objek di konsol PowerShell. Anda dapat membuat file Anda sendiri Format.ps1xml untuk mengubah tampilan objek atau untuk menentukan tampilan default untuk jenis objek baru yang Anda buat di PowerShell.

Deskripsi panjang

File Format.ps1xml di PowerShell menentukan tampilan default objek di PowerShell. Anda dapat membuat file Anda sendiri Format.ps1xml untuk mengubah tampilan objek atau untuk menentukan tampilan default untuk jenis objek baru yang Anda buat di PowerShell.

Saat PowerShell menampilkan objek, powerShell menggunakan data dalam file pemformatan terstruktur untuk menentukan tampilan default objek. Data dalam file pemformatan menentukan apakah objek dirender dalam tabel atau dalam daftar, dan menentukan properti mana yang ditampilkan secara default.

Pemformatan hanya memengaruhi tampilan. Ini tidak memengaruhi properti objek mana yang diteruskan ke alur atau bagaimana properti tersebut diteruskan. Format.ps1xml file tidak dapat digunakan untuk menyesuaikan format output untuk tabel hash.

PowerShell menyertakan tujuh file pemformatan. File-file ini terletak di direktori penginstalan ($PSHOME). Setiap file menentukan tampilan grup objek Microsoft .NET Framework:

  1. Certificate.Format.ps1xml

    Objek di penyimpanan Sertifikat, seperti sertifikat X.509 dan penyimpanan sertifikat.

  2. DotNetTypes.Format.ps1xml

    Jenis .NET Framework lainnya, seperti objek CultureInfo, FileVersionInfo, dan EventLogEntry.

  3. FileSystem.Format.ps1xml

    Objek sistem file, seperti file dan direktori.

  4. Help.Format.ps1xml

    Tampilan bantuan, seperti tampilan terperinci dan lengkap, parameter, dan contoh.

  5. PowerShellCore.Format.ps1xml

    Objek yang dihasilkan oleh cmdlet inti PowerShell, seperti Get-Member dan Get-History.

  6. PowerShellTrace.Format.ps1xml

    Lacak objek, seperti yang dihasilkan oleh Trace-Command cmdlet.

  7. Registry.Format.ps1xml

    Objek registri, seperti kunci dan entri.

File pemformatan dapat menentukan empat tampilan berbeda dari setiap objek:

  • Tabel
  • List
  • Lebar
  • Kustom

Misalnya, ketika output Get-ChildItem perintah disalurkan ke Format-List perintah, Format-List menggunakan tampilan dalam FileSystem.Format.ps1xml file untuk menentukan cara menampilkan file dan objek folder sebagai daftar.

Saat file pemformatan menyertakan lebih dari satu tampilan objek, PowerShell menerapkan tampilan pertama yang ditemukannya.

Format.ps1xml Dalam file, tampilan ditentukan oleh sekumpulan tag XML yang menjelaskan nama tampilan, jenis objek yang dapat diterapkan, header kolom, dan properti yang ditampilkan dalam isi tampilan. Format dalam Format.ps1xml file diterapkan tepat sebelum data disajikan kepada pengguna.

Membuat file Format.ps1xml baru

File .ps1xml yang diinstal dengan PowerShell ditandatangani secara digital untuk mencegah perubahan karena pemformatan dapat menyertakan blok skrip. Untuk mengubah format tampilan tampilan objek yang sudah ada, atau menambahkan tampilan untuk objek baru, buat file Anda sendiri Format.ps1xml , lalu tambahkan ke sesi PowerShell Anda.

Untuk membuat file baru, salin file yang sudah ada Format.ps1xml . File baru dapat memiliki nama apa pun, tetapi harus memiliki .ps1xml ekstensi nama file. Anda dapat menempatkan file baru di direktori apa pun yang dapat diakses oleh PowerShell, tetapi berguna untuk menempatkan file di direktori penginstalan PowerShell ($PSHOME) atau di subdirektori direktori penginstalan.

Untuk mengubah pemformatan tampilan saat ini, temukan tampilan dalam file pemformatan, lalu gunakan tag untuk mengubah tampilan. Untuk membuat tampilan untuk jenis objek baru, buat tampilan baru, atau gunakan tampilan yang sudah ada sebagai model. Tag dijelaskan di bagian berikutnya. Anda kemudian dapat menghapus semua tampilan lain dalam file sehingga perubahannya jelas bagi siapa pun yang memeriksa file.

Setelah Anda menyimpan perubahan, gunakan Update-FormatData cmdlet untuk menambahkan file baru ke sesi PowerShell Anda. Jika Anda ingin tampilan Anda lebih diutamakan daripada tampilan yang ditentukan dalam file bawaan, gunakan parameter PrependPath . Update-FormatData hanya memengaruhi sesi saat ini. Untuk membuat perubahan pada semua sesi mendatang, tambahkan perintah ke Update-FormatData profil PowerShell Anda.

Contoh: Menambahkan data kalender ke objek budaya

Contoh ini menunjukkan cara mengubah pemformatan objek budaya System.Globalization.CultureInfo yang dihasilkan oleh Get-Culture cmdlet dalam sesi PowerShell saat ini. Perintah dalam contoh menambahkan properti Kalender ke tampilan tampilan tabel default objek budaya.

Langkah pertama adalah menemukan Format.ps1xml file yang berisi tampilan objek budaya saat ini. Perintah berikut Select-String menemukan file:

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

Perintah ini mengungkapkan bahwa definisi ada dalam DotNetTypes.Format.ps1xml file.

Perintah berikutnya menyalin konten file ke file baru, MyDotNetTypes.Format.ps1xml.

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

MyDotNetTypes.Format.ps1xml Buka file di XML atau editor teks apa pun, seperti Visual Studio Code. Temukan bagian objek System.Globalization.CultureInfo . XML berikut mendefinisikan tampilan objek CultureInfo . Objek hanya memiliki tampilan 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>

Hapus sisa file, kecuali untuk pembukaan <?xml>, , <Configuration>dan <ViewDefinitions> tag serta penutupan <ViewDefinitions> dan <Configuration> tag. Jika ada tanda tangan digital, hapus dari file kustom Format.ps1xmlAnda.

File MyDotNetTypes.Format.ps1xml sekarang akan terlihat seperti sampel berikut:

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

Buat kolom baru untuk properti Kalender dengan menambahkan sekumpulan <TableColumnHeader> tag baru. Nilai properti Kalender bisa panjang, jadi tentukan nilai 45 karakter sebagai <Width>.

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

Tambahkan item kolom baru untuk Kalender di baris tabel menggunakan <TableColumnItem> tag dan <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>

Simpan dan tutup file. Gunakan Update-FormatData untuk menambahkan file format baru ke sesi PowerShell saat ini.

Contoh ini menggunakan parameter PrependPath untuk menempatkan file baru dalam urutan prioritas yang lebih tinggi daripada file asli. Untuk informasi selengkapnya, lihat Update-FormatData.

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

Untuk menguji perubahan, ketik Get-Culture dan tinjau output yang menyertakan properti Kalender .

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

XML dalam file Format.ps1xml

Definisi skema lengkap dapat ditemukan di Format.xsd di repositori kode sumber PowerShell di GitHub.

Bagian ViewDefinitions dari setiap Format.ps1xml file berisi <View> tag yang menentukan setiap tampilan. Tag umum <View> mencakup tag berikut:

  • <Name> mengidentifikasi nama tampilan.
  • <ViewSelectedBy> menentukan jenis objek atau jenis yang diterapkan tampilan.
  • <GroupBy> menentukan bagaimana item dalam tampilan akan digabungkan dalam grup.
  • <TableControl>, , <ListControl><WideControl>, dan <CustomControl> berisi tag yang menentukan bagaimana setiap item akan ditampilkan.

Tag ViewSelectedBy

Tag <ViewSelectedBy> dapat berisi <TypeName> tag untuk setiap jenis objek yang diterapkan tampilan. Atau, ini dapat berisi <SelectionSetName> tag yang mereferensikan kumpulan pilihan yang ditentukan di tempat lain dengan menggunakan <SelectionSet> tag.

Tag GroupBy

Tag <GroupBy> berisi <PropertyName> tag yang menentukan properti objek tempat item akan dikelompokkan. Ini juga berisi <Label> tag yang menentukan string yang akan digunakan sebagai label untuk setiap grup atau <CustomControlName> tag yang mereferensikan kontrol kustom yang ditentukan di tempat lain menggunakan <Control> tag. Tag <Control> berisi <Name> tag dan <CustomControl> tag.

TableControlTag

Tag <TableControl> biasanya berisi <TableHeaders> tag dan <TableRowEntries> yang menentukan pemformatan untuk kepala dan baris tabel. Tag <TableHeaders> biasanya berisi <TableColumnHeader> tag yang berisi <Label>, <Width>, dan <Alignment> tag. Tag <TableRowEntries> berisi <TableRowEntry> tag untuk setiap baris dalam tabel. Tag <TableRowEntry> berisi <TableColumnItems> tag yang berisi <TableColumnItem> tag untuk setiap kolom dalam baris. Biasanya, <TableColumnItem> tag berisi <PropertyName> tag yang mengidentifikasi properti objek yang akan ditampilkan di lokasi yang <ScriptBlock> ditentukan, atau tag yang berisi kode skrip yang menghitung hasil yang akan ditampilkan di lokasi.

Catatan

Blok skrip juga dapat digunakan di tempat lain di lokasi di mana hasil terhitung dapat berguna.

Tag <TableColumnItem> juga dapat berisi <FormatString> tag yang menentukan bagaimana properti atau hasil terhitung akan ditampilkan.

Tag ListControl

Tag <ListControl> biasanya berisi <ListEntries> tag. Tag <ListEntries> berisi <ListEntry> tag. Tag <ListEntry> berisi <ListItems> tag. Tag <ListItems> berisi <ListItem> tag, yang berisi <PropertyName> tag. Tag <PropertyName> menentukan properti objek yang akan ditampilkan di lokasi yang ditentukan dalam daftar. Jika pilihan tampilan ditentukan menggunakan kumpulan pilihan, <ListControl> tag dan <ListEntry> juga dapat berisi <EntrySelectedBy> tag yang berisi satu atau beberapa <TypeName> tag. Tag ini <TypeName> menentukan jenis objek yang <ListControl> ingin ditampilkan tag.

Tag WideControl

Tag <WideControl> biasanya berisi <WideEntries> tag. Tag <WideEntries> berisi satu atau beberapa <WideEntry> tag. Tag <WideEntry> berisi satu <WideItem> tag.

Tag <WideItem> harus menyertakan <PropertyName> tag atau <ScriptBlock> tag. Tag <PropertyName> menentukan properti yang akan ditampilkan di lokasi yang ditentukan dalam tampilan. Tag <ScriptBlock> menentukan skrip untuk dievaluasi dan ditampilkan di lokasi yang ditentukan dalam tampilan.

Tag <WideItem> dapat berisi <FormatString> tag yang menentukan cara menampilkan properti.

Tag CustomControl

Tag <CustomControl> memungkinkan Anda menggunakan blok skrip untuk menentukan format. Tag <CustomControl> biasanya berisi <CustomEntries> tag yang berisi beberapa <CustomEntry> tag. Setiap <CustomEntry> tag berisi <CustomItem> tag yang dapat berisi berbagai tag yang menentukan konten dan pemformatan lokasi yang ditentukan dalam tampilan, termasuk <Text>tag , , <Indentation><ExpressionBinding>, dan <NewLine> .

Tampilan default di Type.ps1xml

Tampilan default dari beberapa jenis objek dasar didefinisikan dalam Types.ps1xml file di $PSHOME direktori. Simpul diberi nama PsStandardMembers, dan subnode menggunakan salah satu tag berikut:

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

Untuk informasi selengkapnya, lihat about_Types.ps1xml.

Melacak penggunaan file Format.ps1xml

Untuk mendeteksi kesalahan dalam pemuatan atau aplikasi Format.ps1xml file, gunakan Trace-Command cmdlet dengan salah satu komponen format berikut sebagai nilai parameter Nama :

  • FormatFileLoading
  • FormatViewBinding

Untuk informasi selengkapnya, lihat Trace-Command dan Get-TraceSource.

Menandatangani file Format.ps1xml

Untuk melindungi pengguna file Anda Format.ps1xml , tanda tangani file menggunakan tanda tangan digital. Untuk informasi selengkapnya, lihat about_Signing.

Sampel XML untuk tampilan kustom Format-Tabel

Sampel berikut membuat Format-Table tampilan kustom untuk objek System.IO.DirectoryInfo dan System.IO.FileInfo yang dibuat oleh Get-ChildItem. Tampilan kustom diberi nama mygciview dan menambahkan kolom CreationTime ke tabel.

Tampilan kustom dibuat dari versi FileSystem.Format.ps1xml file yang diedit yang disimpan di $PSHOME PowerShell 5.1.

Setelah file kustom .ps1xml Anda disimpan, gunakan Update-FormatData untuk menyertakan tampilan dalam sesi PowerShell. Untuk contoh ini, tampilan kustom harus menggunakan format tabel, jika tidak, Format-Table gagal.

Gunakan Format-Table dengan parameter Tampilan untuk menentukan nama tampilan kustom dan memformat output tabel. Untuk contoh bagaimana perintah dijalankan, lihat Format-Tabel.

$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

Catatan

Agar pas dengan sampel XML dalam batasan lebar garis, perlu untuk memadatkan beberapa indentasi dan menggunakan pemisah baris dalam kode.

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

Lihat juga