about_Format.ps1xml

Kısa açıklama

PowerShell 6'da başlayarak, nesneler için varsayılan görünümler PowerShell kaynak kodunda tanımlanır.

Nesnelerin görüntüsünü değiştirmek veya PowerShell'de oluşturduğunuz yeni nesne türleri için varsayılan görüntüler tanımlamak için kendi Format.ps1xml dosyalarınızı oluşturabilirsiniz.

Uzun açıklama

PowerShell 6'da başlayarak, varsayılan görünümler PowerShell kaynak kodunda tanımlanır. Format.ps1xml PowerShell 5.1 ve önceki sürümlerdeki dosyalar PowerShell 6 ve sonraki sürümlerde yoktur.

PowerShell kaynak kodu, PowerShell konsolundaki nesnelerin varsayılan görüntüsünü tanımlar. Nesnelerin görüntüsünü değiştirmek veya PowerShell'de oluşturduğunuz yeni nesne türleri için varsayılan görüntüler tanımlamak için kendi Format.ps1xml dosyalarınızı oluşturabilirsiniz.

PowerShell bir nesneyi görüntülediğinde, nesnenin varsayılan görünümünü belirlemek için yapılandırılmış biçimlendirme dosyalarındaki verileri kullanır. Biçimlendirme dosyalarındaki veriler, nesnenin bir tabloda mı yoksa listede mi işleneceğini belirler ve varsayılan olarak hangi özelliklerin görüntüleneceğini belirler.

Biçimlendirme yalnızca görüntüyü etkiler. İşlem hattına hangi nesne özelliklerinin geçirildiğini veya bunların nasıl geçirildiğini etkilemez. Format.ps1xml dosyaları karma tabloların çıkış biçimini özelleştirmek için kullanılamaz.

Biçimlendirme .ps1xml dosyası her nesnenin dört farklı görünümünü tanımlayabilir:

  • Tablo
  • Liste
  • Geniş
  • Özel

Örneğin, bir Get-ChildItem komutun çıkışı bir Format-List komuta aktarıldığında, Format-List dosya ve klasör nesnelerinin liste olarak nasıl görüntüleneceğini belirlemek için kaynak kodda tanımlanan liste görünümünü kullanır.

Biçimlendirme dosyası bir nesnenin birden fazla görünümünü içerdiğinde PowerShell, bulduğu ilk görünümü uygular.

Özel Format.ps1xml bir dosyada, görünüm, görünümün adını, uygulanabileceği nesne türünü, sütun üst bilgilerini ve görünümün gövdesinde görüntülenen özellikleri açıklayan bir XML etiketleri kümesi tarafından tanımlanır. Dosyalardaki Format.ps1xml biçim, veriler kullanıcıya sunulmadan hemen önce uygulanır.

Yeni Format.ps1xml dosyaları oluşturma

Var olan nesne görünümünün görüntüleme biçimini değiştirmek veya yeni nesnelere görünüm eklemek için kendi Format.ps1xml dosyalarınızı oluşturun ve bunları PowerShell oturumunuza ekleyin.

Özel görünüm tanımlamak üzere bir Format.ps1xml dosya oluşturmak için Get-FormatData ve Export-FormatData cmdlet'lerini kullanın. Dosyayı düzenlemek için bir metin düzenleyicisi kullanın. Dosya, PowerShell'in erişebileceği herhangi bir dizine (örneğin, bir alt dizinine $HOME) kaydedilebilir.

Geçerli görünümün biçimlendirmesini değiştirmek için, biçimlendirme dosyasında görünümü bulun ve ardından etiketleri kullanarak görünümü değiştirin. Yeni nesne türüne yönelik bir görünüm oluşturmak için yeni bir görünüm oluşturun veya var olan bir görünümü model olarak kullanın. Etiketler sonraki bölümde açıklanmıştır. Daha sonra dosyadaki diğer tüm görünümleri silebilirsiniz, böylece değişiklikler dosyayı inceleyen herkes tarafından anlaşılır.

Değişiklikleri kaydettikten sonra Update-FormatData kullanarak yeni dosyayı PowerShell oturumunuza ekleyin. Görünümünüzün yerleşik dosyalarda tanımlanan görünümden öncelikli olmasını istiyorsanız PrependPath parametresini kullanın. Update-FormatData yalnızca geçerli oturumu etkiler. Gelecekteki tüm oturumlarda değişiklik yapmak için komutunu PowerShell profilinize ekleyin Update-FormatData .

Örnek: Kültür nesnelerine takvim verileri ekleme

Bu örnek, geçerli PowerShell oturumunda cmdlet tarafından oluşturulan System.Globalization.CultureInfo kültür nesnelerinin Get-Culture biçimlendirmesini nasıl değiştireceğini gösterir. Örnekteki komutlar Takvim özelliğini kültür nesnelerinin varsayılan tablo görünümü görünümüne ekler.

Başlamak için, kaynak kod dosyasından biçim verilerini alın ve kültür nesnelerinin geçerli görünümünü içeren bir Format.ps1xml dosya oluşturun.

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

CultureInfo.Format.ps1xml Dosyayı Visual Studio Code gibi herhangi bir XML veya metin düzenleyicisinde açın. Aşağıdaki XML, CultureInfo nesnesinin görünümlerini tanımlar.

Dosya CultureInfo.Format.ps1xml aşağıdaki örnekteki gibi görünmelidir:

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

Yeni bir etiket kümesi <TableColumnHeader> ekleyerek Takvim özelliği için yeni bir sütun oluşturun. Takvim özelliğinin değeri uzun olabilir, bu nedenle olarak <Width>45 karakterlik bir değer belirtin.

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

ve <PropertyName etiketlerini kullanarak <TableColumnItem> tablo satırlarına Takvim için yeni bir sütun öğesi ekleyin:

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

Dosyayı kaydedip kapatın Yeni biçim dosyasını geçerli PowerShell oturumuna eklemek için kullanın Update-FormatData .

Bu örnek, yeni dosyayı özgün dosyadan daha yüksek bir öncelik sırasına yerleştirmek için PrependPath parametresini kullanır. Daha fazla bilgi için bkz . Update-FormatData.

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

Değişikliği test etmek için Calendar özelliğini içeren çıkışı yazın Get-Culture ve gözden geçirin.

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

Format.ps1xml dosyalarındaki XML

Tam şema tanımı, GitHub'daki PowerShell kaynak kodu deposundaki Format.xsd dosyasında bulunabilir.

Her dosyanın ViewDefinitions bölümü, her Format.ps1xml görünümü tanımlayan etiketleri içerir <View> . Tipik <View> bir etiket aşağıdaki etiketleri içerir:

  • <Name> görünümün adını tanımlar.
  • <ViewSelectedBy> görünümün uygulandığı nesne türünü veya türlerini belirtir.
  • <GroupBy> görünümdeki öğelerin gruplar halinde nasıl birleştirileceğini belirtir.
  • <TableControl>, <ListControl>, <WideControl>ve <CustomControl> her öğenin nasıl görüntüleneceğini belirten etiketleri içerir.

ViewSelectedBy etiketi

etiketi, görünümün <ViewSelectedBy> uygulandığı her nesne türü için bir <TypeName> etiket içerebilir. Alternatif olarak, bir etiket kullanılarak başka bir yerde tanımlanan bir seçim kümesine başvuran bir <SelectionSet> etiket de içerebilir<SelectionSetName>.

GroupBy etiketi

etiketi, <GroupBy> öğelerin gruplandırılacağı object özelliğini belirten bir <PropertyName> etiket içerir. Ayrıca, her grup <Label> için etiket olarak kullanılacak bir dizeyi belirten bir etiket veya <CustomControlName> etiket kullanarak başka bir yerde tanımlanan özel denetime başvuran bir <Control> etiket içerir. Etiket <Control> bir <Name> etiket ve bir <CustomControl> etiket içerir.

TableControlTag

Etiket <TableControl> genellikle tablonun başları ve <TableRowEntries> satırları için biçimlendirmeyi tanımlayan ve etiketleri içerir<TableHeaders>. <TableHeaders> Etiketi genellikle , <Width>ve <Alignment> etiketlerini içeren <Label>etiketler içerir<TableColumnHeader>. etiketi, <TableRowEntries> tablodaki her satır için etiketler içerir <TableRowEntry> . etiketi, <TableRowEntry> satırdaki her sütun için bir etiket içeren bir <TableColumnItem> etiket içerir<TableColumnItems>. Genellikle etiket, <TableColumnItem> tanımlanan konumda görüntülenecek nesne özelliğini tanımlayan bir <PropertyName><ScriptBlock> etiket veya konumda görüntülenecek bir sonucu hesaplayan betik kodu içeren bir etiket içerir.

Not

Betik blokları, hesaplanan sonuçların yararlı olabileceği konumlarda da kullanılabilir.

Etiketi, <TableColumnItem> özelliğin veya hesaplanan sonuçların nasıl görüntüleneceğini belirten bir <FormatString> etiket de içerebilir.

ListControl etiketi

Etiket <ListControl> genellikle bir <ListEntries> etiket içerir. Etiketi <ListEntries> bir <ListEntry> etiket içerir. Etiketi <ListEntry> bir <ListItems> etiket içerir. <ListItems> etiketi, etiketleri içeren etiketler içerir <ListItem><PropertyName>. Etiketler, <PropertyName> listede belirtilen konumda görüntülenecek nesne özelliğini belirtir. Görünüm seçimi bir seçim kümesi kullanılarak tanımlanırsa ve <ListControl><ListEntry> etiketleri bir veya daha fazla <TypeName> etiket içeren bir <EntrySelectedBy> etiket de içerebilir. Bu <TypeName> etiketler, etiketin görüntülemeyi <ListControl> amaçladığı nesne türünü belirtir.

WideControl etiketi

Etiket <WideControl> genellikle bir <WideEntries> etiket içerir. Etiketi <WideEntries> bir veya daha fazla <WideEntry> etiket içerir. Bir <WideEntry> etiket bir <WideItem> etiket içerir.

Etiketin <WideItem> etiket <PropertyName> veya etiket içermesi <ScriptBlock> gerekir. Etiket <PropertyName> , görünümde belirtilen konumda görüntülenecek özelliği belirtir. Etiket <ScriptBlock> , görünümde belirtilen konumda değerlendirilecek ve görüntülenecek bir betik belirtir.

Bir <WideItem> etiket, özelliğinin nasıl görüntüleneceğini belirten bir <FormatString> etiket içerebilir.

CustomControl etiketi

etiketi, <CustomControl> biçim tanımlamak için bir betik bloğu kullanmanıza olanak tanır. Etiket <CustomControl> genellikle birden çok <CustomEntry> etiket içeren bir <CustomEntries> etiket içerir. Her <CustomEntry> etiket, görünümde belirtilen konumun içeriğini ve biçimlendirmesini belirten , <Indentation>, <ExpressionBinding>ve <NewLine> etiketleri dahil olmak üzere <Text>çeşitli etiketler içerebilen bir <CustomItem> etiket içerir.

Format.ps1xml dosya kullanımını izleme

Dosyaların yüklenmesi veya uygulanmasındaki Format.ps1xml hataları algılamak için Name parametresinin Trace-Command değeri olarak aşağıdaki biçim bileşenlerinden herhangi biriyle cmdlet'ini kullanın:

  • FormatFileLoading
  • FormatViewBinding

Daha fazla bilgi için bkz . Trace-Command ve Get-TraceSource.

Format.ps1xml dosyasını imzalama

Dosyanızın Format.ps1xml kullanıcılarını korumak için dijital imza kullanarak dosyayı imzalayın. Daha fazla bilgi için bkz . about_Signing.

Format-Table özel görünümü için örnek XML

Aşağıdaki XML örneği, tarafından Get-ChildItemoluşturulan System.IO.DirectoryInfo ve System.IO.FileInfo nesneleri için özel bir Format-Table görünüm oluşturur. Özel görünüm mygciview olarak adlandırılır ve CreationTime sütununu tabloya ekler.

Özel görünümü oluşturmak için ve Export-FormatData cmdlet'lerini kullanarak Get-FormatData bir .ps1xml dosya oluşturun. Ardından, özel görünümünüzün kodunu oluşturmak için dosyanızı .ps1xml düzenleyin. Dosya, .ps1xml PowerShell'in erişebileceği herhangi bir dizinde depolanabilir. Örneğin, öğesinin $HOMEbir alt dizini.

.ps1xml Dosya oluşturulduktan sonra, görünümü geçerli PowerShell oturumuna eklemek için cmdlet'ini kullanınUpdate-FormatData. İsterseniz, tüm PowerShell oturumlarında kullanılabilir görünüme ihtiyacınız varsa güncelleştirme komutunu PowerShell profilinize de ekleyebilirsiniz.

Bu örnekte özel görünümün tablo biçimini kullanması gerekir, aksi takdirde Format-Table başarısız olur.

Özel görünümün adını, mygciview değerini belirtmek ve tablonun çıkışını CreationTime sütunuyla biçimlendirmek için View parametresiyle kullanınFormat-Table. Komutun nasıl çalıştırıldığından bir örnek için bkz . Format-Table.

Not

Özel görünüm oluşturmak için kaynak koddan biçimlendirme XML'sini alsanız da, istenen sonucu elde etmek için daha fazla geliştirme gerekebilir.

Aşağıdaki Get-FormatData komutta, tüm yerel biçimlendirme bilgilerinin döndürülmesini sağlamak için PowerShellVersion parametresinin bir alternatifi vardır. Belirli bir PowerShell sürümü yerine kullanın -PowerShellVersion $PSVersionTable.PSVersion .

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>

Ayrıca bkz.