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.ps1xmlfile: Genişletilmiş tür verileri tanımlayan bir XML dosyası.Update-TypeData: Dosyaları yeniden yük eden ve geçerliTypes.ps1xmloturumda 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.ps1xmlgö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-TypeDatatü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ı yenidenTypes.ps1xmlyü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.