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ájlokat Types.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ájlokat Types.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-TypeDataUpdate-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.ps1xmla 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, ConvertToDateTimeConvertFromDateTime 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