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ı Types.ps1xml dosyayı PowerShell yükleme dizininde () depolamıştı $PSHOME .

Genişletilmiş tür verilerini PowerShell 'e ekleme

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

  • Genişletilmiş tür verileri PowerShell tarafından tanımlanır ve her PowerShell oturumunda otomatik olarak yüklenir. PowerShell 6 ' dan itibaren bu bilgiler PowerShell 'e derlenir ve artık bir dosyada yer alınmaz Types.ps1xml .

  • Types.ps1xmlModüller dışa aktarma işlemi, modül geçerli oturuma aktarıldığında yüklenir.

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

Oturumunda, üç kaynaktaki 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 üzeri sürümlerde Microsoft. PowerShell. Utility modülüne dahildir.

  • 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: Geçerli oturumdan genişletilmiş tür verilerini kaldırır.

Bu cmdlet 'ler hakkında daha fazla bilgi için, her bir cmdlet için yardım konusuna bakın.

Yerleşik Types.ps1XML dosyaları

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

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

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

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

New diğerad özelliğini almak için, Get-Member Aşağıdaki örnekte gösterildiği gibi herhangi bir dizide bir komut kullanın.

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

Komut 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 ya da length özelliğini kullanabilirsiniz. Örnek:

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

Yeni Types.ps1XML dosyaları oluşturma

.ps1xmlBiçimlendirme betik blokları içerebildiğinden, PowerShell ile yüklenen dosyalar, izinsiz değişiklik yapılmasını engellemek 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 ardından bunları PowerShell oturumunuza ekleyin.

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

Yeni dosyayı kaydettiğinizde, Update-TypeData PowerShell oturumunuza yeni dosyayı eklemek için cmdlet 'ini kullanın. Türlerin tanımlı yerleşik türler üzerinde öncelikli olmasını istiyorsanız, cmdlet 'inin Prependdata parametresini kullanın Update-TypeData . Update-TypeData yalnızca geçerli oturumu etkiler. Sonraki tüm oturumlardaki değişikliği yapmak için, konsolunu dışarı aktarın veya Update-TypeData PowerShell profilinize komutunu ekleyin.

Types.ps1XML ve Add-Member

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

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

Örnek: FileInfo nesnelerine yaş üyesi ekleme

Bu örnek, System. IO. FileInfo nesnelerine bir Age özelliğinin nasıl ekleneceğini gösterir. Bir dosyanın yaşı, oluşturulma zamanı ve günün geçerli saati arasındaki farktır.

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

İzleme XML kodunu dosyaya kaydedin $PSHOME\MyTypes.ps1xml .

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

Update-TypeDataYeni dosyayı geçerli oturuma eklemek için ' i çalıştırın Types.ps1xml . Komut, yeni dosyayı özgün tanımlardan daha yüksek bir öncelik sırasına yerleştirmek için 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, Get-ChildItem dizinde PowerShell.exe dosyayı almak üzere bir komut çalıştırın $PSHOME ve sonra dosyanın Format-List tüm özelliklerini listelemek için dosyayı cmdlet 'ine boru yapın. Değişikliğin sonucu olarak, yaş özelliği listede görüntülenir.

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

Types.ps1XML dosyalarındaki XML

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

<Types>Etiketi, dosyasında tanımlanan tüm türleri barındırır. Yalnızca bir <Types> etiket olmalıdır.

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

Tür etiketlerinin aşağıdaki etiketleri içermesi gerekir:

<Name>: Etkilenen .NET türünün adını barındırır.

<Members>: .NET türü için tanımlanan yeni özellikler ve yöntemlerin etiketlerini barındırır.

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

Diğerad özelliği

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 <Name> <Members> bir etiketi içine atay gerekir. Ö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, oturum geçmişinde öğelerin kimlik numarası gibi özellik değerlerinin örneklerini tanımlar.

Örneğin, aşağıdaki XML System.ServiceProcess.ServiceController cmdlet'i tarafından döndürülen hizmetlerin (nesnelerin) varsayılan Get-Service display'ini tanımlar. Durum, Ad ve DisplayName özelliklerine sahip varsayılan bir ö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 bir yöntemine başvurur.

<Methods>: nesnesinin yöntemlerinin koleksiyonu.

NoteProperty

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

Etiketin, yeni özelliğin adını belirten bir etiketi ve özelliğin değerini belirten <NoteProperty> bir etiketi olması <Name> <Value> gerekir.

Ö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şkenleri alan ve bir değer dönüşen özellikler.

<Properties>: Nesnesinin özelliklerinin koleksiyonu.

<Property>: Temel nesnenin özelliği.

<PropertySet>: Nesnesinin özelliklerinin bir koleksiyonunu tanımlar.

Etiketin özellik kümesi adını belirten bir etiketi ve özellikleri <PropertySet> belirten bir etiketi olması <Name> <ReferencedProperty> gerekir. Özelliklerin adları etiket içine <Name> alınır.

içinde, Types.ps1xml etiketler bir nesnenin varsayılan görüntüsü için özellik <PropertySet> kümelerini tanımlamak için kullanılır. Varsayılan görüntülemeleri, bir etiketin etiketinde PsStandardMembers <Name> değerine göre <MemberSet> 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 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ırarak Update-TypeData eklenen özellikler yöntem söz dizimi kullanamaz.

Types.ps1xml dosyasını imzalama

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

Ayrıca bkz.

about_Signing

Öğe-Kopyala

Copy-ItemProperty

Get-Member

Get-TypeData

Remove-TypeData

Update-TypeData