about_Types.ps1xml

Kısa açıklama

Types.ps1xmlPowerShell'de kullanılan nesne türlerini genişletmek için dosyaların nasıl kullanıllarını açıklar.

Uzun açıklama

Genişletilmiş tür verileri, PowerShell'de nesne türlerinin ek özelliklerini ve yöntemlerini ("üyeler") tanımlar. PowerShell oturumuna genişletilmiş tür verileri eklemek için iki teknik vardır.

  • Types.ps1xml file: Genişletilmiş tür verileri tanımlayan bir XML dosyası.
  • Update-TypeData: Dosyaları yeniden yük eden ve geçerli Types.ps1xml oturumda türler için genişletilmiş verileri tanımlayan bir cmdlet.

Bu konuda dosyalar Types.ps1xml açıklanmıştır. Geçerli oturuma dinamik genişletilmiş tür verileri eklemek için cmdlet'ini kullanma hakkında daha fazla Update-TypeData bilgi için bkz. Update-TypeData.

Genişletilmiş tür verileri hakkında

Genişletilmiş tür verileri, PowerShell'de nesne türlerinin ek özelliklerini ve yöntemlerini ("üyeler") tanımlar. PowerShell tarafından desteklenen herhangi bir türü genişletebilirsiniz ve eklenen özellikleri ve yöntemleri, nesne türlerinde tanımlanan özellikleri kullanmakla aynı şekilde kullanabilirsiniz.

Örneğin, PowerShell cmdlet'inin döndürenleri gibi tüm nesnelere bir DateTime System.DateTime Get-Date özelliği ekler.

(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM

DateTime özelliğini System.DateTime yapısının açıklamasında bulamazsiniz çünkü PowerShell özelliği ekler ve yalnızca PowerShell'de görünür durumdadır.

PowerShell, varsayılan genişletilmiş türler kümesi tanımlar. Bu tür bilgileri başlangıçtaki her PowerShell oturumuna yüklenir. DateTime özelliği bu varsayılan kümenin bir parçası. PowerShell 6'dan önce tür tanımları dosyayı PowerShell yükleme Types.ps1xml dizininde () depolamıştı. $PSHOME

PowerShell'e genişletilmiş tür verileri ekleme

PowerShell oturumlarında üç genişletilmiş tür veri kaynağı vardır.

  • Genişletilmiş tür verileri PowerShell tarafından tanımlanır ve her PowerShell oturumuna otomatik olarak yüklenir. PowerShell 6'dan itibaren bu bilgiler PowerShell'de derlenmiş ve artık bir dosyada Types.ps1xml gönderilemeyecektir.

  • Types.ps1xmlModül geçerli oturuma aktarılırken modül dışarı aktaran dosyalar yüklenir.

  • cmdlet'i kullanılarak tanımlanan genişletilmiş Update-TypeData tür verileri yalnızca geçerli oturuma eklenir. Bir dosyaya kayıtlı değildir.

Oturumda, üç kaynakta bulunan genişletilmiş tür verileri nesnelere aynı şekilde uygulanır ve belirtilen türdeki tüm nesnelerde kullanılabilir.

TypeData cmdlet'leri

Aşağıdaki cmdlet'ler PowerShell 3.0 ve sonraki bir sürümün Microsoft.PowerShell.Utility modülüne dahil edilir.

  • Get-TypeData: Geçerli oturumda genişletilmiş tür verilerini alır.
  • Update-TypeData: Dosyaları yeniden Types.ps1xml yükleme. Geçerli oturuma genişletilmiş tür verileri ekler.
  • Remove-TypeData: Genişletilmiş tür verilerini geçerli oturumdan kaldırır.

Bu cmdlet'ler hakkında daha fazla bilgi için her cmdlet'in yardım konu başlığına bakın.

Yerleşik Types.ps1xml dosyaları

Dizinde Types.ps1xml yer alan dosyalar her $PSHOME oturuma otomatik olarak eklenir.

PowerShell yükleme dizinindeki ( ) dosyası, PowerShell'de kullanılan nesnelere özellik ve yöntem eklemenize olanak sağlayan XML tabanlı Types.ps1xml $PSHOME bir metin dosyasıdır. PowerShell'de .NET türlerine birkaç öğe ekli yerleşik dosyalar vardır, ancak türleri daha da genişletmek Types.ps1xml Types.ps1xml için ek dosyalar oluşturabilirsiniz.

Örneğin, dizi nesneleri ( System.Array ) varsayılan olarak dizideki nesne sayısını listeleye bir Length özelliğine sahiptir. Ancak, Length adı özelliği açıkça açıklamay olduğundan PowerShell, aynı değeri görüntüleyen Count adlı bir diğer ad özelliği ekler. Aşağıdaki XML, Count özelliğini türe System.Array ekler.

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>
        Length
      </ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

Yeni AliasProperty'i almak için, aşağıdaki Get-Member örnekte gösterildiği gibi herhangi bir dizide bir komut kullanın.

Get-Member -InputObject (1,2,3,4)

Komutu aşağıdaki sonuçları döndürür.

Name       MemberType    Definition
----       ----------    ----------
Count      AliasProperty Count = Length
Address    Method        System.Object& Address(Int32)
Clone      Method        System.Object Clone()
CopyTo     Method        System.Void CopyTo(Array array, Int32 index):
Equals     Method        System.Boolean Equals(Object obj)
Get        Method        System.Object Get(Int32)
# ...

Sonuç olarak, PowerShell'de dizilerin Count özelliğini veya Length özelliğini kullanabilirsiniz. Örneğin:

(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4

Yeni xml Types.ps1oluşturma

Biçimlendirme betik blokları içermesi nedeniyle, PowerShell ile birlikte yüklenmiş dosyalar üzerinde oynanmasını önlemek .ps1xml için dijital olarak imzalanmıştır. Bu nedenle, bir .NET türüne özellik veya yöntem eklemek için kendi dosyalarınızı oluşturun ve sonra Types.ps1xml bunları PowerShell oturuma ekleyin.

Yeni bir dosya oluşturmak için başlangıç olarak var olan bir dosyayı Types.ps1xml kopyalayın. Yeni dosyanın herhangi bir adı olabilir, ancak dosya adı .ps1xml uzantısına sahip olması gerekir. Yeni dosyayı PowerShell tarafından erişilebilen herhangi bir dizine yer açabilirsiniz, ancak dosyaları PowerShell yükleme dizinine ( ) veya yükleme dizininin alt dizinine $PSHOME yer sağlamak yararlıdır.

Yeni dosyayı kaydeden Update-TypeData cmdlet'ini kullanarak yeni dosyayı PowerShell oturuma ekleyin. Türlerinizi tanımlanan yerleşik türlerden önce almak için cmdlet'in PrependData Update-TypeData parametresini kullanın. Update-TypeData yalnızca geçerli oturumu etkiler. Gelecekteki tüm oturumlarda değişiklik yapmak için konsolunu dışarı aktarın veya Update-TypeData komutu PowerShell profilinize ekleyin.

Types.ps1xml ve Add-Member

Dosyalar, Types.ps1xml etkilenen PowerShell oturumunda belirtilen .NET türünün nesnelerinin tüm örneklerine özellikler ve yöntemler ekler. Ancak, bir nesnenin yalnızca bir örneğine özellik veya yöntem eklemeniz gerekirse Add-Member cmdlet'ini kullanın.

Daha fazla bilgi için bkz. Add-Member.

Örnek: FileInfo nesnelerine Age üyesi ekleme

Bu örnekte, System.IO.FileInfo nesnelerine Age özelliğinin nasıl ekli olduğu gösterir. Bir dosyanın yaşı, oluşturma zamanı ile gün olarak geçerli saat arasındaki farktır.

Age özelliği bir betik bloğu kullanılarak hesaplanmış olduğundan, yeni Age özelliği için model olarak <ScriptProperty> kullanmak üzere bir etiket bulun.

Aşağıdaki XML kodunu dosyasına $PSHOME\MyTypes.ps1xml kaydedin.

<?xml version="1.0" encoding="utf-8" ?>
<Types>
  <Type>
    <Name>System.IO.FileInfo</Name>
    <Members>
      <ScriptProperty>
        <Name>Age</Name>
        <GetScriptBlock>
          ((Get-Date) - ($this.CreationTime)).Days
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
</Types>

Yeni Update-TypeData dosyayı geçerli Types.ps1xml oturuma eklemek için çalıştırın. Komut, yeni dosyayı özgün tanımlardan daha yüksek bir öncelik sırasına yer alan PrependData parametresini kullanır.

hakkında daha fazla bilgi için Update-TypeData bkz. Update-TypeData.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Değişikliği test etmek için, dizininde PowerShell.exe dosyasını almak için bir komut çalıştırın ve ardından dosyayı cmdlet'ine yönelterek dosyanın tüm Get-ChildItem $PSHOME özelliklerini Format-List listelenin. Değişikliğin sonucunda Age özelliği listede görünür.

Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142

Types.ps1xml dosyalarında XML

Tam şema tanımı, GitHub'daki PowerShell kaynak kodu deposunda types.xsd içinde bulunabilir.

<Types>Etiketi, dosyada tanımlanan tüm türleri içerir. Yalnızca bir etiket <Types> olması gerekir.

Dosyada belirtilen her .NET türü bir etiketle temsil <Type> etmek gerekir.

Tür etiketleri aşağıdaki etiketleri içermeli:

<Name>: Etkilenen .NET türünün adını içine alan.

<Members>: .NET türü için tanımlanan yeni özellikler ve yöntemler için etiketleri kapsayan.

Aşağıdaki üye etiketlerden herhangi biri etiketin içinde <Members> olabilir.

AliasProperty

Mevcut bir özellik için yeni bir ad tanımlar.

Etiketin yeni özelliğin adını belirten bir etiketi ve var olan <AliasProperty> özelliği belirten bir etiketi olması <Name> <ReferencedMemberName> gerekir.

Örneğin, Diğer ad sayısı özelliği, dizi nesnelerinin Length özelliği için bir diğer addır.

<Type>
  <Name>System.Array</Name>
  <Members>
    <AliasProperty>
      <Name>Count</Name>
      <ReferencedMemberName>Length</ReferencedMemberName>
    </AliasProperty>
  </Members>
</Type>

CodeMethod

Bir .NET sınıfının statik yöntemine başvurur.

Etiketin yeni yöntemin adını belirten bir etiketi ve yöntemin tanımlandığı <CodeMethod> <Name> kodu belirten bir <CodeReference> etikete sahip olması gerekir.

Örneğin ToString yöntemi, Microsoft.PowerShell.ToStringCodeMethods kod tanımının adıdır.

  <Type>
    <Name>System.Xml.XmlNode</Name>
    <Members>
      <CodeMethod>
        <Name>ToString</Name>
        <CodeReference>
          <TypeName>Microsoft.PowerShell.ToStringCodeMethods</TypeName>
          <MethodName>XmlNode</MethodName>
        </CodeReference>
      </CodeMethod>
    </Members>
  </Type>

CodeProperty

Bir .NET sınıfının statik yöntemine başvurur.

Etiketin, yeni özelliğin adını belirten bir etiketi ve özelliğin tanımlandığı <CodeProperty> kodu belirten bir etiketi olması <Name> <GetCodeReference> gerekir.

Örneğin nesnelerin Mode System.IO.DirectoryInfo özelliği, PowerShell Dosya Sistemi sağlayıcısında tanımlanan bir kod özelliğidir.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <CodeProperty>
      <Name>Mode</Name>
      <GetCodeReference>
        <TypeName>
          Microsoft.PowerShell.Commands.FileSystemProvider
        </TypeName>
        <MethodName>Mode</MethodName>
      </GetCodeReference>
    </CodeProperty>
  </Members>
</Type>

MemberSet

Üye koleksiyonunu tanımlar (özellikler ve yöntemler).

Etiketler <MemberSet> birincil etiketlerin içinde <Members> görünür. Etiketler, üye kümesi adını çevreleyen bir etiket ve kümenin üyelerini (özellikler ve yöntemler) çevreleyen ikincil bir <Name> <Members> etiketi içine aladır. Özellik (veya gibi) veya yöntem (veya gibi) oluşturmak için kullanılan <NoteProperty> <ScriptProperty> <Method> <ScriptMethod> etiketlerden herhangi biri kümenin üyesi olabilir.

Dosyalarda Types.ps1xml <MemberSet> etiket, PowerShell'de .NET nesnelerinin varsayılan görünümlerini tanımlamak için kullanılır. Bu durumda, üye kümesi adı (etiketler içindeki değer) her zaman <Name> PsStandardMembers olur ve özelliklerin adları (etiketin <Name> değeri) aşağıdakilerden biri olur:

  • DefaultDisplayProperty: Bir nesnenin tek bir özelliği.

  • DefaultDisplayPropertySet: Bir nesnenin bir veya daha fazla özelliği.

  • DefaultKeyPropertySet: Bir nesnenin bir veya daha fazla anahtar özelliği. Anahtar özelliği, bir oturum geçmişindeki öğelerin KIMLIK numarası gibi özellik değerlerinin örneklerini tanımlar.

Örneğin, aşağıdaki XML, cmdlet tarafından döndürülen hizmetler (nesneler) için varsayılan görüntülemeyi tanımlar System.ServiceProcess.ServiceController Get-Service . Durum, ad ve DisplayName özelliklerine sahip bir varsayılan özellik kümesinden oluşan psstandardmembers adlı bir üye kümesini tanımlar.

<Type>
  <Name>System.ServiceProcess.ServiceController</Name>
  <Members>
    <MemberSet>
      <Name>PSStandardMembers</Name>
      <Members>
        <PropertySet>
          <Name>DefaultDisplayPropertySet</Name>
          <ReferencedProperties>
            <Name>Status</Name>
            <Name>Name</Name>
            <Name>DisplayName</Name>
          </ReferencedProperties>
        </PropertySet>
      </Members>
    </MemberSet>
  </Members>
</Type>

<Method>: Temel alınan nesnenin yerel bir yöntemine başvurur.

<Methods>: Nesnenin yöntemlerinin bir koleksiyonu.

Noteözelliği

Statik bir değere sahip bir özelliği tanımlar.

<NoteProperty>Etiketin, <Name> Yeni özelliğin adını belirten bir etiketi ve <Value> özelliğinin değerini belirten bir etiketi olmalıdır.

Örneğin, aşağıdaki XML, System. IO. DirectoryInfo nesneleri Için bir Status özelliği oluşturur. Status özelliğinin değeri her zaman başarılı olur.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <NoteProperty>
      <Name>Status</Name>
      <Value>Success</Value>
    </NoteProperty>
  </Members>
</Type>

PropertySet

Bağımsız değişken alan ve bir değer döndüren Özellikler.

<Properties>: Nesnenin özelliklerinin koleksiyonu.

<Property>: Temel nesnenin bir özelliği.

<PropertySet>: Nesnenin özelliklerinin koleksiyonunu tanımlar.

<PropertySet>Etiket, <Name> özellik kümesi adını ve özellikleri belirten bir etiketi belirten bir etikete sahip olmalıdır <ReferencedProperty> . Özelliklerin adları etiketi içine alınmıştır <Name> .

' De Types.ps1xml , <PropertySet> bir nesnenin varsayılan görüntüsü için özellik kümelerini tanımlamak üzere Etiketler kullanılır. Varsayılan ekranları, bir etiketinin etiketindeki Psstandardmembers değerine göre belirleyebilirsiniz <Name> <MemberSet> .

Örneğin, aşağıdaki XML üç Referencedproperties Ile defaultdisplaypropertyset adlı bir PropertySet oluşturur.

<Type>
  <Name>System.ServiceProcess.ServiceController</Name>
  <Members>
    <MemberSet>
      <Name>PSStandardMembers</Name>
      <Members>
        <PropertySet>
          <Name>DefaultDisplayPropertySet</Name>
          <ReferencedProperties>
            <Name>Status</Name>
            <Name>Name</Name>
            <Name>DisplayName</Name>
          </ReferencedProperties>
        </PropertySet>
      </Members>
    </MemberSet>
  </Members>
</Type>

ScriptMethod

Değeri bir betiğin çıkışı olan bir yöntemi tanımlar.

<ScriptMethod>Etikette, <Name> yeni yöntemin adını belirten bir etiketi ve <Script> Yöntem sonucunu döndüren betik bloğunu kapsayan bir etiketi olmalıdır.

Örneğin, ConvertToDateTime ConvertFromDateTime Management Objects 'in ve yöntemleri (), System.System.Management.ManagementObject ToDateTime sınıfının ve Statik yöntemlerini kullanan betik yöntemleridir ToDmtfDateTime System.Management.ManagementDateTimeConverter .

<Type>
 <Name>System.Management.ManagementObject</Name>
 <Members>
 <ScriptMethod>
   <Name>ConvertToDateTime</Name>
   <Script>
   [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
   </Script>
 </ScriptMethod>
 <ScriptMethod>
   <Name>ConvertFromDateTime</Name>
   <Script>
   [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
   </Script>
 </ScriptMethod>
 </Members>
</Type>

ScriptProperty

Bir betiğin çıkışı olan bir özelliği tanımlar.

<ScriptProperty>Etikette, <Name> Yeni özelliğin adını belirten bir etiketi ve <GetScriptBlock> özellik değerini döndüren betik bloğunu kapsayan bir etiketi olmalıdır.

Örneğin, System. IO. FileInfo nesnesinin VersionInfo özelliği, System. Diagnostics. FileVersionInfo nesnelerinin GetVersionInfo static yönteminin FullName özelliğinin kullanılmasıyla sonuçlanan bir betik özelliğidir.

<Type>
  <Name>System.IO.FileInfo</Name>
  <Members>
    <ScriptProperty>
      <Name>VersionInfo</Name>
      <GetScriptBlock>
      [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
      </GetScriptBlock>
    </ScriptProperty>
  </Members>
</Type>

daha fazla bilgi için bkz. Windows PowerShell yazılım geliştirme seti (SDK).

Update-TypeData

Types.ps1xmlDosyalarınızı bir PowerShell oturumuna yüklemek için Update-TypeData cmdlet 'ini çalıştırın. Dosyanızdaki türlerin yerleşik dosyadaki türlerden öncelikli olmasını istiyorsanız Types.ps1xml , öğesinin Prependdata parametresini ekleyin Update-TypeData . Update-TypeData yalnızca geçerli oturumu etkiler. Sonraki tüm oturumlardaki değişikliği yapmak için oturumu dışarı aktarın veya Update-TypeData PowerShell profilinize komutunu ekleyin.

Özelliklerde oluşan veya bir komuta Özellikler eklemeden oluşan özel durumlar Update-TypeData , hataları rapor etmez StdErr . Bu, biçimlendirme ve çıktısı sırasında birçok ortak türde gerçekleşen özel durumları göstermemek. .NET özellikleri alıyorsanız, aşağıdaki örnekte gösterildiği gibi Yöntem söz dizimini kullanarak özel durumların gizlemesini geçici olarak çözebilirsiniz:

"hello".get_Length()

Yöntem sözdiziminin yalnızca .NET özellikleriyle kullanılabileceğini unutmayın. Cmdlet 'i çalıştırılarak eklenen özellikler Update-TypeData metot sözdizimini kullanamaz.

Types.ps1XML dosyasını imzalama

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

Ayrıca bkz.

about_Signing

Copy-Item

Copy-ItemProperty

Üye Al

Get-TypeData

Remove-TypeData

Update-TypeData