about_Types.ps1xml
Rövid leírás
Ebből a cikkből megtudhatja, hogyan terjesztheti ki a PowerShellben használt objektumtípusokat fájlok használatával Types.ps1xml
.
Hosszú leírás
A kiterjesztett típusadatok az objektumtípusok további tulajdonságait és metódusait ("tagjait") határozzák meg a PowerShellben. A kiterjesztett típusadatok PowerShell-munkamenetekhez való hozzáadásának két módszere van.
Types.ps1xml
fájl: Kiterjesztett típusú adatokat definiáló XML-fájl.Update-TypeData
: Egy parancsmag, amely újra betölti a fájlokatTypes.ps1xml
, és kiterjesztett adatokat határoz meg az aktuális munkamenet típusaihoz.
Ez a témakör a fájlokat ismerteti Types.ps1xml
. További információ arról, hogy a Update-TypeData
parancsmaggal dinamikus kiterjesztett típusú adatokat adhat hozzá az aktuális munkamenethez, lásd: Update-TypeData.
A kiterjesztett típusadatok ismertetése
A kiterjesztett típusadatok az objektumtípusok további tulajdonságait és metódusait ("tagjait") határozzák meg a PowerShellben. Bármilyen, a PowerShell által támogatott típust kiterjeszthet, és a hozzáadott tulajdonságokat és metódusokat ugyanúgy használhatja, mint az objektumtípusokon definiált tulajdonságokat.
A PowerShell például egy DateTime tulajdonságot ad hozzá az összes System.DateTime
objektumhoz, például azokhoz, amelyeket a Get-Date
parancsmag visszaad.
(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM
A DateTime tulajdonság nem található a System.DateTime struktúra leírásában, mert a PowerShell hozzáadja a tulajdonságot, és csak a PowerShellben látható.
A PowerShell belsőleg definiálja a kiterjesztett típusok alapértelmezett készletét. Ez a típusinformáció minden PowerShell-munkamenetbe betöltődik indításkor. A DateTime tulajdonság ennek az alapértelmezett készletnek a része. A PowerShell 6 előtt a típusdefiníciók a Types.ps1xml
Fájlt a PowerShell telepítési könyvtárában ($PSHOME
) tárolták.
Bővített típusadatok hozzáadása a PowerShellhez
A PowerShell-munkamenetekben három kiterjesztett típusú adatforrás található.
A kiterjesztett típusadatokat a PowerShell határozza meg, és minden PowerShell-munkamenetbe automatikusan betöltődik. A PowerShell 6-tól kezdve ez az információ a PowerShell-be lesz lefordítva, és már nem egy fájlban
Types.ps1xml
lesz kézbesítve.A
Types.ps1xml
modulok által exportált fájlok betöltése a modul aktuális munkamenetbe való importálásakor történik.A parancsmaggal
Update-TypeData
definiált kiterjesztett típusadatok csak az aktuális munkamenethez lesznek hozzáadva. A rendszer nem fájlba menti.
A munkamenetben a három forrásból származó kiterjesztett típusú adatok ugyanúgy lesznek alkalmazva az objektumokra, és a megadott típusok összes objektumán elérhetők.
A TypeData-parancsmagok
Az alábbi parancsmagok a PowerShell 3.0-s és újabb verzióinak Microsoft.PowerShell.Utility moduljában találhatók.
Get-TypeData
: Kiterjesztett típusadatokat kap az aktuális munkamenetben.Update-TypeData
: Újra betölti a fájlokatTypes.ps1xml
. Bővített típusadatokat ad hozzá az aktuális munkamenethez.Remove-TypeData
: Eltávolítja a bővített típusadatokat az aktuális munkamenetből.
Ezekről a parancsmagokról további információt az egyes parancsmagok súgótémakörében talál.
Beépített Types.ps1xml-fájlok
A Types.ps1xml
címtárban lévő $PSHOME
fájlok automatikusan hozzáadódnak minden munkamenethez.
A Types.ps1xml
PowerShell telepítési könyvtárában ($PSHOME
) található fájl egy XML-alapú szövegfájl, amely lehetővé teszi tulajdonságok és metódusok hozzáadását a PowerShellben használt objektumokhoz. A PowerShell beépített Types.ps1xml
fájlokkal rendelkezik, amelyek több elemet is hozzáadnak a .NET-típusokhoz, de további Types.ps1xml
fájlokat is létrehozhat a típusok további kiterjesztéséhez.
A tömbobjektumok (System.Array
) például alapértelmezés szerint rendelkeznek egy Length tulajdonságmal, amely felsorolja a tömb objektumainak számát. Mivel azonban a Hossz név nem írja le egyértelműen a tulajdonságot, a PowerShell hozzáad egy Darabszám nevű aliastulajdonságot, amely ugyanazt az értéket jeleníti meg. Az alábbi XML hozzáadja a Count tulajdonságot a System.Array
típushoz.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
Az új AliasProperty beszerzéséhez használjon egy Get-Member
parancsot bármelyik tömbön, ahogy az az alábbi példában is látható.
Get-Member -InputObject (1,2,3,4)
A parancs a következő eredményeket adja vissza.
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)
# ...
Ennek eredményeképpen használhatja a Tömbök Darabszám tulajdonságát vagy a Tömbök Hossz tulajdonságát a PowerShellben. Példa:
(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4
Új Types.ps1xml-fájlok létrehozása
A .ps1xml
PowerShell-lel telepített fájlok digitálisan vannak aláírva, hogy megakadályozzák a illetéktelen módosítást, mert a formázás szkriptblokkokat is tartalmazhat. Ezért ha tulajdonságot vagy metódust szeretne hozzáadni egy .NET-típushoz, hozzon létre saját Types.ps1xml
fájlokat, majd vegye fel őket a PowerShell-munkamenetbe.
Új fájl létrehozásához először másolja ki a meglévő Types.ps1xml
fájlt. Az új fájlnak bármilyen neve lehet, de fájlnévkiterjesztéssel .ps1xml
kell rendelkeznie. Az új fájlt bármely, a PowerShell számára elérhető könyvtárba helyezheti, de hasznos lehet a fájlokat a PowerShell telepítési könyvtárában ($PSHOME
) vagy a telepítési könyvtár alkönyvtárában elhelyezni.
Amikor mentette az új fájlt, a Update-TypeData
parancsmaggal vegye fel az új fájlt a PowerShell-munkamenetbe. Ha azt szeretné, hogy a típusok elsőbbséget élvezhessenek a definiált beépített típusokkal szemben, használja a Update-TypeData
parancsmag PrependData paraméterét. Update-TypeData
csak az aktuális munkamenetre van hatással. Az összes jövőbeli munkamenet módosításához exportálja a konzolt, vagy adja hozzá a parancsot a Update-TypeData
PowerShell-profilhoz.
Types.ps1xml és Add-Member
A Types.ps1xml
fájlok tulajdonságokat és metódusokat adnak hozzá az érintett PowerShell-munkamenetben megadott .NET-típusú objektumok összes példányához. Ha azonban csak egy objektum egy példányához szeretne tulajdonságokat vagy metódusokat hozzáadni, használja a Add-Member
parancsmagot.
További információ: Tag hozzáadása.
Példa: Kortag hozzáadása FileInfo-objektumokhoz
Ez a példa bemutatja, hogyan adhat hozzá Kor tulajdonságot a System.IO.FileInfo objektumokhoz. A fájlok kora a létrehozási idő és a napok aktuális ideje közötti különbség.
Mivel az Age tulajdonságot szkriptblokk használatával számítja ki, keressen egy <ScriptProperty>
címkét, amelyet modellként használ az új Age tulajdonsághoz.
Mentse a következő XML-kódot a fájlba $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>
Futtassa Update-TypeData
az új Types.ps1xml
fájl hozzáadását az aktuális munkamenethez. A parancs a PrependData paraméterrel helyezi el az új fájlt az eredeti definícióknál nagyobb sorrendben.
További információ: Update-TypeData
Update-TypeData.
Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml
A módosítás teszteléséhez futtasson egy Get-ChildItem
parancsot a PowerShell.exe fájl könyvtárban $PSHOME
való lekéréséhez, majd a parancsmagra Format-List
állítva listázhatja a fájl összes tulajdonságát. A módosítás eredményeként az Age tulajdonság megjelenik a listában.
Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142
Az XML a Types.ps1xml fájlokban
A teljes sémadefiníció a Types.xsd fájlban található a GitHub PowerShell-forráskódtárában.
A <Types>
címke a fájlban definiált összes típust magában foglal. Csak egy <Types>
címke lehet.
A fájlban említett .NET-típusokat címkével <Type>
kell jelölni.
A típuscímkéknek a következő címkéket kell tartalmazniuk:
<Name>
: Az érintett .NET-típus nevét csatolja.
<Members>
: A .NET-típushoz definiált új tulajdonságok és metódusok címkéit tartalmazza.
A következő tagcímkék bármelyike szerepelhet a <Members>
címkén.
AliasProperty
Egy meglévő tulajdonság új nevét határozza meg.
A <AliasProperty>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja az új tulajdonság nevét és a <ReferencedMemberName>
meglévő tulajdonságot meghatározó címkét.
A Count alias tulajdonság például a tömbobjektumok Hossz tulajdonságának aliasa.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
CodeMethod
Egy .NET-osztály statikus metódusára hivatkozik.
A <CodeMethod>
címkének rendelkeznie kell egy <Name>
olyan címkével, amely megadja az új metódus nevét, valamint egy <CodeReference>
olyan címkével, amely megadja a metódust definiáló kódot.
A ToString metódus például a Microsoft.PowerShell.ToStringCodeMethods kóddefiníció neve.
<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
Egy .NET-osztály statikus metódusára hivatkozik.
A <CodeProperty>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja az új tulajdonság nevét, és egy <GetCodeReference>
olyan címkével, amely megadja azt a kódot, amelyben a tulajdonság definiálva van.
Az objektumok Mód tulajdonsága System.IO.DirectoryInfo
például a PowerShell-fájlrendszer szolgáltatójában definiált kódtulajdonság.
<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
Taggyűjteményt (tulajdonságokat és metódusokat) határoz meg.
A <MemberSet>
címkék az elsődleges <Members>
címkéken belül jelennek meg. A címkéknek tartalmazniuk kell a <Name>
tagkészlet nevét körülvevő címkét és egy másodlagos <Members>
címkét, amely körülveszi a tagok (tulajdonságok és metódusok) a halmazt. A tulajdonságot (például vagy ) vagy metódust (például <NoteProperty>
<Method>
vagy <ScriptProperty>
<ScriptMethod>
) létrehozó címkék bármelyike tagja lehet a halmaznak.
A fájlokban Types.ps1xml
a <MemberSet>
címke a .NET-objektumok alapértelmezett nézeteinek meghatározására szolgál a PowerShellben. Ebben az esetben a tagkészlet neve (a címkéken belüli <Name>
érték) mindig PsStandardMembers, a tulajdonságok neve (a <Name>
címke értéke) pedig az alábbiak egyike:
DefaultDisplayProperty
: Egy objektum egyetlen tulajdonsága.DefaultDisplayPropertySet
: Egy objektum egy vagy több tulajdonsága.DefaultKeyPropertySet
: Egy objektum egy vagy több fő tulajdonsága. A kulcstulajdonságok a tulajdonságértékek példányait azonosítják, például egy munkamenet-előzmény elemeinek azonosítószámát.
A következő XML például a parancsmag által visszaadott szolgáltatások (System.ServiceProcess.ServiceController
objektumok) alapértelmezett megjelenítését Get-Service
határozza meg. Egy PsStandardMembers nevű tagkészletet határoz meg, amely egy alapértelmezett tulajdonságkészletből áll, amely az Állapot, a Név és a DisplayName tulajdonsággal rendelkezik.
<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>
: A mögöttes objektum natív metódusára hivatkozik.
<Methods>
: Az objektum metódusainak gyűjteménye.
NoteProperty
Statikus értékkel rendelkező tulajdonságot határoz meg.
A <NoteProperty>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja az új tulajdonság nevét, és egy <Value>
olyan címkével, amely megadja a tulajdonság értékét.
A következő XML például létrehoz egy Állapot tulajdonságot a System.IO.DirectoryInfo objektumokhoz. Az Állapot tulajdonság értéke mindig sikeres.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
PropertySet
Olyan tulajdonságok, amelyek argumentumokat vesznek fel, és értéket adnak vissza.
<Properties>
: Az objektum tulajdonságainak gyűjteménye.
<Property>
: Az alapobjektum tulajdonsága.
<PropertySet>
: Az objektum tulajdonságainak gyűjteményét határozza meg.
A <PropertySet>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja a tulajdonságkészlet nevét és a <ReferencedProperty>
tulajdonságokat meghatározó címkét. A tulajdonságok neve a címke részét képezik <Name>
.
Ebben Types.ps1xml
a nézetben <PropertySet>
a címkék egy objektum alapértelmezett megjelenítésének tulajdonságkészletét határozzák meg. Az alapértelmezett megjelenítéseket a címke címkéjében <MemberSet>
szereplő <Name>
PsStandardMembers érték alapján azonosíthatja.
A következő XML például létrehoz egy DefaultDisplayPropertySet nevű tulajdonságkészletet három ReferencedProperties tulajdonsággal.
<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
Olyan metódust definiál, amelynek értéke egy szkript kimenete.
A <ScriptMethod>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja az új metódus nevét, és egy <Script>
címkével, amely a metódus eredményét visszaadó szkriptblokkot tartalmazza.
A felügyeleti objektumok (System.System.Management.ManagementObject
) például olyan szkriptmetódusok, ConvertToDateTime
ConvertFromDateTime
amelyek az ToDateTime
osztály statikus és ToDmtfDateTime
statikus metódusait System.Management.ManagementDateTimeConverter
használják.
<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
Olyan tulajdonságot határoz meg, amelynek értéke egy szkript kimenete.
A <ScriptProperty>
címkének rendelkeznie kell egy <Name>
címkével, amely megadja az új tulajdonság nevét, valamint egy <GetScriptBlock>
olyan címkével, amely a tulajdonság értékét visszaadó szkriptblokkot tartalmazza.
A System.IO.FileInfo objektum VersionInfo tulajdonsága például egy szkripttulajdonság, amely a System.Diagnostics.FileVersionInfo objektumok GetVersionInfo statikus metódusának FullName tulajdonságát használja.
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>
<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
További információ: Windows PowerShell Software Development Kit (SDK).
Update-TypeData
A Types.ps1xml
fájlok PowerShell-munkamenetbe való betöltéséhez futtassa a Update-TypeData
parancsmagot. Ha azt szeretné, hogy a fájlban lévő típusok elsőbbséget élvezhessenek a beépített Types.ps1xml
fájlban lévő típusokkal szemben, adja hozzá a PrependData paramétert Update-TypeData
. Update-TypeData
csak az aktuális munkamenetre van hatással. Az összes jövőbeli munkamenet módosításához exportálja a munkamenetet, vagy adja hozzá a parancsot a Update-TypeData
PowerShell-profilhoz.
A tulajdonságokban előforduló kivételek, illetve a tulajdonságok parancshoz való Update-TypeData
hozzáadása nem jelentik a hibákat a parancsban StdErr
. Ez a formázás és a kimenetelés során gyakran előforduló kivételek mellőzése. Ha .NET-tulajdonságokat kap, a kivételek mellőzése megkerülhető módszerszintaxis használatával, ahogyan az alábbi példában látható:
"hello".get_Length()
Vegye figyelembe, hogy a metódusszintaxis csak .NET-tulajdonságokkal használható. A parancsmag futtatásával hozzáadott tulajdonságok nem használhatják a Update-TypeData
metódus szintaxisát.
Types.ps1xml fájl aláírása
A fájl felhasználóinak Types.ps1xml
védelme érdekében digitális aláírással is aláírhatja a fájlt. További információ: about_Signing.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: