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:
Certificate.Format.ps1xml
Objek di penyimpanan Sertifikat, seperti sertifikat X.509 dan penyimpanan sertifikat.
DotNetTypes.Format.ps1xml
Jenis .NET Framework lainnya, seperti objek CultureInfo, FileVersionInfo, dan EventLogEntry.
FileSystem.Format.ps1xml
Objek sistem file, seperti file dan direktori.
Help.Format.ps1xml
Tampilan bantuan, seperti tampilan terperinci dan lengkap, parameter, dan contoh.
PowerShellCore.Format.ps1xml
Objek yang dihasilkan oleh cmdlet inti PowerShell, seperti
Get-Member
danGet-History
.PowerShellTrace.Format.ps1xml
Lacak objek, seperti yang dihasilkan oleh
Trace-Command
cmdlet.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.ps1xml
Anda.
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>