about_Types.ps1xml

Kısa açıklama

PowerShell'de kullanılan nesne türlerini genişletmek için dosyaların nasıl kullanılacağını Types.ps1xml 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 eklemeye yönelik iki teknik vardır.

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

Bu konuda dosyalar açıklanmaktadır Types.ps1xml . Geçerli oturuma Update-TypeData dinamik genişletilmiş tür verileri eklemek için cmdlet'ini kullanma hakkında daha fazla 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şletebilir ve eklenen özellikleri ve yöntemleri, nesne türlerinde tanımlanan özellikleri kullandığınız gibi kullanabilirsiniz.

Örneğin PowerShell, cmdlet'in döndürdüğü nesneler Get-Date gibi tüm System.DateTime nesnelere bir DateTime ö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 bulamazsınız çünkü PowerShell özelliği ekler ve yalnızca PowerShell'de görünür.

PowerShell, varsayılan bir genişletilmiş tür kümesini dahili olarak tanımlar. Bu tür bilgiler başlangıçtaki tüm PowerShell oturumlarında yüklenir. DateTime özelliği bu varsayılan kümenin bir parçasıdır. PowerShell 6'nın öncesinde, tür tanımları dosyayı PowerShell yükleme dizininde ($PSHOME) depolardıTypes.ps1xml.

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 başlayarak, bu bilgiler PowerShell'de derlenmiş ve artık bir Types.ps1xml dosyada gönderilmez.

  • Types.ps1xml Modül geçerli oturuma aktarıldığında modüllerin dışarı aktarmış olduğu dosyalar yüklenir.

  • Cmdlet kullanılarak Update-TypeData tanımlanan genişletilmiş tür verileri yalnızca geçerli oturuma eklenir. Dosyaya kaydedilmez.

Oturumda, üç kaynaktan genişletilmiş tür verileri nesnelere aynı şekilde uygulanır ve belirtilen türlerin tüm nesnelerinde kullanılabilir.

TypeData cmdlet'leri

Aşağıdaki cmdlet'ler PowerShell 3.0 ve sonraki sürümlerde Microsoft.PowerShell.Utility modülüne eklenmiştir.

  • Get-TypeData: Geçerli oturumdaki genişletilmiş tür verilerini alır.
  • Update-TypeData: Dosyaları yeniden yükler Types.ps1xml . 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 için yardım konusuna bakın.

Yerleşik Types.ps1xml dosyaları

Types.ps1xml Dizindeki $PSHOME dosyalar her oturuma otomatik olarak eklenir.

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

Örneğin, dizi nesnelerinin (System.Array) varsayılan olarak dizideki nesne sayısını listeleyen bir Length özelliği vardır. Ancak, Length adı özelliği açıkça açıklamadığından, 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ürüne System.Array ekler.

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

Yeni AliasProperty'yi almak için, aşağıdaki örnekte gösterildiği gibi herhangi bir dizide bir Get-Member 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 Types.ps1xml dosyaları oluşturma

.ps1xml Biçimlendirme betik blokları içerebileceğinden, PowerShell ile yüklenen dosyalar üzerinde oynanmasını önlemek için dijital olarak imzalanır. Bu nedenle, bir .NET türüne özellik veya yöntem eklemek için kendi Types.ps1xml dosyalarınızı oluşturun ve bunları PowerShell oturumunuza ekleyin.

Yeni bir dosya oluşturmak için, var olan Types.ps1xml bir dosyayı kopyalayarak başlayın. Yeni dosya herhangi bir ada sahip olabilir, ancak dosya .ps1xml adı uzantısına sahip olmalıdır. Yeni dosyayı PowerShell'in erişebildiği herhangi bir dizine yerleştirebilirsiniz, ancak dosyaları PowerShell yükleme dizinine ($PSHOME) veya yükleme dizininin alt dizinine yerleştirmek yararlıdır.

Yeni dosyayı kaydettiğinizde, cmdlet'ini Update-TypeData kullanarak yeni dosyayı PowerShell oturumunuza ekleyin. Türlerinizin tanımlanan yerleşik türlerden öncelikli olmasını istiyorsanız, cmdlet'in Update-TypeData PrependData parametresini kullanın. Update-TypeData yalnızca geçerli oturumu etkiler. Gelecekteki tüm oturumlarda değişiklik yapmak için konsolu dışarı aktarın veya komutu PowerShell profilinize ekleyin Update-TypeData .

Types.ps1xml ve Add-Member

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

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

Örnek: FileInfo nesnelerine Yaş üyesi ekleme

Bu örnekte System.IO.FileInfo nesnelerine Age özelliğinin nasıl ekleneceği gösterilmektedir. Dosyanın yaşı, oluşturulma zamanı ile gün cinsinden geçerli saat arasındaki farktır.

Age özelliği bir betik bloğu kullanılarak hesaplandığından, yeni Age özelliği için model olarak kullanılacak bir etiket bulun<ScriptProperty>.

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

<?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 Types.ps1xml dosyayı geçerli oturuma eklemek için komutunu çalıştırınUpdate-TypeData. komutu, yeni dosyayı özgün tanımlardan daha yüksek bir öncelik sırasına yerleştirmek için PrependData parametresini kullanır.

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

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Değişikliği test etmek için bir Get-ChildItem komut çalıştırarak dizindeki $PSHOME PowerShell.exe dosyasını alın ve ardından dosyayı cmdlet'ine Format-List aktararak dosyanın tüm özelliklerini listeleyin. Değişikliğin bir sonucu olarak Age özelliği listede görünür.

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

Types.ps1xml dosyalarındaki XML

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

etiketi, <Types> dosyada tanımlanan tüm türleri kapsayan. Yalnızca bir <Types> etiket olmalıdır.

Dosyada bahsedilen her .NET türü bir <Type> etiketle temsil edilmelidir.

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

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

<Members>: .NET türü için tanımlanan yeni özelliklerin ve yöntemlerin etiketlerini içine alır.

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

AliasProperty

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

etiketi, <AliasProperty> yeni özelliğin adını belirten bir <Name> etikete ve var olan özelliği belirten bir <ReferencedMemberName> etikete sahip olmalıdır.

Örneğin, Count diğer adı ö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

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

etiketi, <CodeMethod> yeni yöntemin adını belirten bir <Name> etikete ve yöntemin tanımlandığı kodu belirten bir <CodeReference> etikete sahip olmalıdır.

Ö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

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

etiketi, <CodeProperty> yeni özelliğin adını belirten bir <Name> etikete ve özelliğin tanımlandığı kodu belirten bir <GetCodeReference> etikete sahip olmalıdır.

Örneğin, nesnelerin Mode özelliği System.IO.DirectoryInfo PowerShell FileSystem 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

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

Etiketler <MemberSet> birincil <Members> etiketlerin içinde görünür. Etiketler, üye kümesinin adını çevreleyen bir <Name> etiketi ve kümedeki üyeleri (özellikler ve yöntemler) çevreleyen ikincil <Members> bir etiketi içine almalıdır. Özellik (veya gibi <NoteProperty><ScriptProperty>) veya bir yöntem (<Method><ScriptMethod>veya gibi) oluşturan etiketler kümenin üyeleri olabilir.

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

  • DefaultDisplayProperty: Bir nesnenin tek ö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 sayısı gibi özellik değerlerinin örneklerini tanımlar.

Örneğin, aşağıdaki XML cmdlet'i tarafından Get-Service döndürülen hizmetlerin (System.ServiceProcess.ServiceControllernesneler) varsayılan görüntüsünü tanımlar. Status, Name ve DisplayName özelliklerine sahip bir varsayılan özellik kümesinden oluşan PsStandardMembers adlı bir üye kümesi 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 yöntemine başvurur.

<Methods>: Nesnesinin yöntemlerinin koleksiyonu.

NoteProperty

Statik değere sahip bir özellik tanımlar.

etiketi, <NoteProperty> yeni özelliğin adını belirten bir <Name> etikete ve özelliğin değerini belirten bir <Value> etikete sahip 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ı'dır.

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

PropertySet

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

<Properties>: Nesnesinin özellikleri koleksiyonu.

<Property>: Temel nesnenin özelliği.

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

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

uygulamasında Types.ps1xmletiketler, <PropertySet> bir nesnenin varsayılan görüntüsü için özellik kümelerini tanımlamak için kullanılır. Varsayılan ekranları, bir <MemberSet> etiketin etiketindeki <Name> PsStandardMembers değerine göre tanımlayabilirsiniz.

Ö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 betiğin çıktısı olan bir yöntemi tanımlar.

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

Örneğin, yönetim nesnelerinin ConvertToDateTime (System.System.Management.ManagementObject) ve ConvertFromDateTime yöntemleri, sınıfının ve ToDmtfDateTime statik yöntemlerini kullanan ToDateTime betik yöntemleridirSystem.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

Değeri betiğin çıktısı olan bir özelliği tanımlar.

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

Örneğin, System.IO.FileInfo nesnesinin VersionInfo özelliği, System.Diagnostics.FileVersionInfo nesnelerinin GetVersionInfo statik yönteminin FullName özelliğinin kullanılmasından kaynaklanan 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

Dosyalarınızı Types.ps1xml bir PowerShell oturumuna yüklemek için cmdlet'ini Update-TypeData çalıştırın. Dosyanızdaki türlerin yerleşik Types.ps1xml dosyadaki türlerden öncelikli olmasını istiyorsanız, prependData parametresini Update-TypeDataekleyin. Update-TypeData yalnızca geçerli oturumu etkiler. Gelecekteki tüm oturumlarda değişiklik yapmak için oturumu dışarı aktarın veya komutu PowerShell profilinize ekleyin Update-TypeData .

Özelliklerde veya bir Update-TypeData komuta özellik ekleme sırasında oluşan özel durumlar, hata bildirmez StdErr. Bu, biçimlendirme ve çıkış sırasında birçok yaygın türde ortaya çıkabilecek özel durumları engellemektir. .NET özellikleri alıyorsanız, aşağıdaki örnekte gösterildiği gibi bunun yerine yöntem söz dizimini kullanarak özel durumların gizlenmesiyle ilgili geçici bir çözüm bulabilirsiniz:

"hello".get_Length()

Yöntem söz dizimlerinin yalnızca .NET özellikleriyle kullanılabileceğini unutmayın. cmdlet'i çalıştırılarak Update-TypeData eklenen özellikler yöntem söz dizimini kullanamaz.

Types.ps1xml dosyasını imzalama

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

Ayrıca bkz.