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ükleyenTypes.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üklerTypes.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.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 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-TypeData
daha 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.ServiceController
nesneler) varsayılan görüntüsünü tanımlar. Varsayılan özellik kümesi ve varsayılan görüntüleme özelliğinden oluşan PsStandardMembers adlı bir üye kümesini tanımlar. Varsayılan özellik kümesini Status, Name ve DisplayName özellikleri olarak tanımlar. Varsayılan görüntüleme özelliğini Ad olarak 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>
<NoteProperty>
<Name>DefaultDisplayProperty</Name>
<Value>Name</Value>
</NoteProperty>
</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.ps1xml
etiketler, <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-TypeData
ekleyin. 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.
PowerShell