about_Types.ps1xml

Kort beskrivning

Förklarar hur du använder Types.ps1xml filer för att utöka de typer av objekt som används i PowerShell.

Lång beskrivning

Utökade typdata definierar ytterligare egenskaper och metoder ("medlemmar") för objekttyper i PowerShell. Det finns två tekniker för att lägga till utökade typdata i en PowerShell-session.

  • Types.ps1xml fil: En XML-fil som definierar utökade typdata.
  • Update-TypeData: En cmdlet som läser in Types.ps1xml filer igen och definierar utökade data för typer i den aktuella sessionen.

Det här avsnittet beskriver Types.ps1xml filer. Mer information om hur du använder cmdleten Update-TypeData för att lägga till dynamiska utökade typdata i den aktuella sessionen finns i Update-TypeData.

Om data av utökad typ

Utökade typdata definierar ytterligare egenskaper och metoder ("medlemmar") för objekttyper i PowerShell. Du kan utöka alla typer som stöds av PowerShell och använda de tillagda egenskaperna och metoderna på samma sätt som du använder de egenskaper som definieras för objekttyperna.

PowerShell lägger till exempel till en DateTime-egenskap till alla System.DateTime objekt, till exempel de som cmdleten Get-Date returnerar.

(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM

Du hittar inte egenskapen DateTime i beskrivningen av System.DateTime-strukturen eftersom PowerShell lägger till egenskapen och endast visas i PowerShell.

PowerShell definierar internt en standarduppsättning med utökade typer. Den här typen av information läses in i varje PowerShell-session vid start. Egenskapen DateTime är en del av den här standarduppsättningen. Före PowerShell 6 lagrades Types.ps1xml typdefinitionerna filen i PowerShell-installationskatalogen ($PSHOME).

Lägga till utökade typdata i PowerShell

Det finns tre källor med utökade typdata i PowerShell-sessioner.

  • Utökade typdata definieras av PowerShell och läses in automatiskt i varje PowerShell-session. Från och med PowerShell 6 kompileras den här informationen till PowerShell och levereras inte längre i en Types.ps1xml fil.

  • Filerna Types.ps1xml som moduler exporterar läses in när modulen importeras till den aktuella sessionen.

  • Utökade typdata som definieras med hjälp av cmdleten Update-TypeData läggs bara till i den aktuella sessionen. Den sparas inte i en fil.

I sessionen tillämpas de utökade typdata från de tre källorna på objekt på samma sätt och är tillgängliga för alla objekt av de angivna typerna.

TypeData-cmdletarna

Följande cmdletar ingår i modulen Microsoft.PowerShell.Utility i PowerShell 3.0 och senare.

  • Get-TypeData: Hämtar utökade typdata i den aktuella sessionen.
  • Update-TypeData: Läser in Types.ps1xml filer igen. Lägger till utökade typdata i den aktuella sessionen.
  • Remove-TypeData: Tar bort utökade typdata från den aktuella sessionen.

Mer information om dessa cmdletar finns i hjälpavsnittet för varje cmdlet.

Inbyggda Types.ps1xml-filer

Filerna Types.ps1xml i $PSHOME katalogen läggs till automatiskt i varje session.

Filen Types.ps1xml i PowerShell-installationskatalogen ($PSHOME) är en XML-baserad textfil som gör att du kan lägga till egenskaper och metoder i de objekt som används i PowerShell. PowerShell har inbyggda filer som lägger till flera element i Types.ps1xml .NET-typerna, men du kan skapa ytterligare Types.ps1xml filer för att utöka typerna ytterligare.

Till exempel har matrisobjekt (System.Array) som standard en längdegenskap som visar antalet objekt i matrisen. Men eftersom namnet Längd inte tydligt beskriver egenskapen lägger PowerShell till en aliasegenskap med namnet Count som visar samma värde. Följande XML lägger till egenskapen Count till System.Array typen .

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

Om du vill hämta det nya AliasProperty använder du ett Get-Member kommando på valfri matris, som du ser i följande exempel.

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

Kommandot returnerar följande resultat.

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)
# ...

Därför kan du använda egenskapen Count eller egenskapen Längd för matriser i PowerShell. Till exempel:

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

Skapa nya Types.ps1xml-filer

Filerna .ps1xml som installeras med PowerShell signeras digitalt för att förhindra manipulering eftersom formateringen kan innehålla skriptblock. Om du vill lägga till en egenskap eller metod i en .NET-typ skapar du därför dina egna Types.ps1xml filer och lägger sedan till dem i PowerShell-sessionen.

Om du vill skapa en ny fil börjar du med att kopiera en befintlig Types.ps1xml fil. Den nya filen kan ha valfritt namn, men den måste ha ett .ps1xml filnamnstillägg. Du kan placera den nya filen i valfri katalog som är tillgänglig för PowerShell, men det är användbart att placera filerna i PowerShell-installationskatalogen ($PSHOME) eller i en underkatalog i installationskatalogen.

När du har sparat den nya filen använder du cmdleten Update-TypeData för att lägga till den nya filen i PowerShell-sessionen. Om du vill att dina typer ska ha företräde framför de inbyggda typer som definieras använder du parametern PrependData för cmdleten Update-TypeData . Update-TypeData påverkar endast den aktuella sessionen. Om du vill göra ändringen i alla framtida sessioner exporterar du konsolen eller lägger till kommandot i Update-TypeData din PowerShell-profil.

Types.ps1xml och Add-Member

Filerna Types.ps1xml lägger till egenskaper och metoder till alla instanser av objekten av den angivna .NET-typen i den berörda PowerShell-sessionen. Men om du bara behöver lägga till egenskaper eller metoder till en instans av ett objekt använder du cmdleten Add-Member .

Mer information finns i Lägg till medlem.

Exempel: Lägga till en åldersmedlem i FileInfo-objekt

Det här exemplet visar hur du lägger till en åldersegenskap i System.IO.FileInfo-objekt . En fils ålder är skillnaden mellan dess skapandetid och den aktuella tiden i dagar.

Eftersom egenskapen Ålder beräknas med hjälp av ett skriptblock letar du upp en <ScriptProperty> tagg som ska användas som modell för egenskapen New Age.

Spara följande XML-kod i filen $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>

Kör Update-TypeData för att lägga till den nya Types.ps1xml filen i den aktuella sessionen. Kommandot använder parametern PrependData för att placera den nya filen i en högre prioritetsordning än de ursprungliga definitionerna.

Mer information om Update-TypeDatafinns i Update-TypeData.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Testa ändringen genom att köra ett Get-ChildItem kommando för att hämta PowerShell.exe-filen i $PSHOME katalogen och sedan skicka filen till cmdleten Format-List för att visa alla egenskaper för filen. Som ett resultat av ändringen visas egenskapen Ålder i listan.

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

XML i Types.ps1xml-filer

Den fullständiga schemadefinitionen finns i Types.xsd i PowerShell-källkodslagringsplatsen på GitHub.

Taggen <Types> omsluter alla typer som definieras i filen. Det bör bara finnas en <Types> tagg.

Varje .NET-typ som anges i filen ska representeras av en <Type> tagg.

Typtaggar måste innehålla följande taggar:

<Name>: Omger namnet på den berörda .NET-typen.

<Members>: Omsluter taggarna för de nya egenskaper och metoder som har definierats för .NET-typen.

Någon av följande medlemstaggar kan finnas i taggen <Members> .

AliasProperty

Definierar ett nytt namn för en befintlig egenskap.

Taggen <AliasProperty> måste ha en <Name> tagg som anger namnet på den nya egenskapen och en <ReferencedMemberName> tagg som anger den befintliga egenskapen.

Egenskapen Count alias är till exempel ett alias för egenskapen Längd för matrisobjekt.

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

CodeMethod

Refererar till en statisk metod för en .NET-klass.

Taggen <CodeMethod> måste ha en <Name> tagg som anger namnet på den nya metoden och en <CodeReference> tagg som anger koden där metoden definieras.

Metoden ToString är till exempel namnet på koddefinitionen Microsoft.PowerShell.ToStringCodeMethods.

  <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

Refererar till en statisk metod för en .NET-klass.

Taggen <CodeProperty> måste ha en <Name> tagg som anger namnet på den nya egenskapen och en <GetCodeReference> tagg som anger koden som egenskapen definieras i.

Egenskapen System.IO.DirectoryInfo Läge för objekt är till exempel en kodegenskap som definierats i PowerShell FileSystem-providern.

<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

Definierar en samling medlemmar (egenskaper och metoder).

Taggarna <MemberSet> visas i de primära <Members> taggarna. Taggarna måste omsluta en <Name> tagg som omger namnet på medlemsuppsättningen och en sekundär <Members> tagg som omger medlemmarna (egenskaper och metoder) i uppsättningen. Alla taggar som skapar en egenskap (till exempel <NoteProperty> eller <ScriptProperty>) eller en metod (till exempel <Method> eller <ScriptMethod>) kan vara medlemmar i uppsättningen.

I Types.ps1xml filer används taggen <MemberSet> för att definiera standardvyerna för .NET-objekten i PowerShell. I det här fallet är namnet på medlemsuppsättningen (värdet i taggarna <Name> ) alltid PsStandardMembers och namnen på egenskaperna (värdet för taggen <Name> ) är något av följande:

  • DefaultDisplayProperty: En enskild egenskap för ett objekt.

  • DefaultDisplayPropertySet: En eller flera egenskaper för ett objekt.

  • DefaultKeyPropertySet: En eller flera viktiga egenskaper för ett objekt. En nyckelegenskap identifierar instanser av egenskapsvärden, till exempel ID-antalet objekt i en sessionshistorik.

Följande XML definierar till exempel standardvisningen av tjänster (System.ServiceProcess.ServiceController objekt) som returneras av cmdleten Get-Service . Den definierar en medlemsuppsättning med namnet PsStandardMembers som består av en standardegenskapuppsättning med egenskaperna Status, Namn och DisplayName .

<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>: Refererar till en intern metod för det underliggande objektet.

<Methods>: En samling av objektmetoderna.

NoteProperty

Definierar en egenskap med ett statiskt värde.

Taggen <NoteProperty> måste ha en <Name> tagg som anger namnet på den nya egenskapen och en <Value> tagg som anger värdet för egenskapen.

Följande XML skapar till exempel en statusegenskap för System.IO.DirectoryInfo-objekt . Värdet för egenskapen Status är alltid Lyckades.

<Type>
  <Name>System.IO.DirectoryInfo</Name>
  <Members>
    <NoteProperty>
      <Name>Status</Name>
      <Value>Success</Value>
    </NoteProperty>
  </Members>
</Type>

PropertySet

Egenskaper som tar argument och returnerar ett värde.

<Properties>: En samling av objektets egenskaper.

<Property>: En egenskap för basobjektet.

<PropertySet>: Definierar en samling egenskaper för objektet.

Taggen <PropertySet> måste ha en <Name> tagg som anger namnet på egenskapsuppsättningen och en <ReferencedProperty> tagg som anger egenskaperna. Namnen på egenskaperna omges <Name> av taggen.

<PropertySet> I Types.ps1xmlanvänds taggar för att definiera uppsättningar med egenskaper för standardvisningen av ett objekt. Du kan identifiera standardskärmarna med värdet PsStandardMembers i taggen för <Name> en <MemberSet> tagg.

Följande XML skapar till exempel en PropertySet med namnet DefaultDisplayPropertySet med tre ReferencedProperties.

<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

Definierar en metod vars värde är utdata från ett skript.

Taggen <ScriptMethod> måste ha en <Name> tagg som anger namnet på den nya metoden och en <Script> tagg som omger skriptblocket som returnerar metodresultatet.

Metoderna och ConvertFromDateTime för hanteringsobjekt (System.System.Management.ManagementObject) är till exempel ConvertToDateTime skriptmetoder som använder ToDateTime klassens statiska metoder och 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

Definierar en egenskap vars värde är utdata från ett skript.

Taggen <ScriptProperty> måste ha en <Name> tagg som anger namnet på den nya egenskapen och en <GetScriptBlock> tagg som omger skriptblocket som returnerar egenskapsvärdet.

Egenskapen VersionInfo för objektet System.IO.FileInfo är till exempel en skriptegenskap som resulterar i att egenskapen FullName används för den statiska metoden GetVersionInfo för System.Diagnostics.FileVersionInfo-objekt.

<Type>
  <Name>System.IO.FileInfo</Name>
  <Members>
    <ScriptProperty>
      <Name>VersionInfo</Name>
      <GetScriptBlock>
      [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
      </GetScriptBlock>
    </ScriptProperty>
  </Members>
</Type>

Mer information finns i Windows PowerShell Software Development Kit (SDK).

Update-TypeData

Om du vill läsa in dina Types.ps1xml filer i en PowerShell-session kör du cmdleten Update-TypeData . Om du vill att typerna i filen ska ha företräde framför typer i den inbyggda Types.ps1xml filen lägger du till parametern PrependData för Update-TypeData. Update-TypeData påverkar endast den aktuella sessionen. Om du vill göra ändringen i alla framtida sessioner exporterar du sessionen eller lägger till kommandot i Update-TypeData din PowerShell-profil.

Undantag som inträffar i egenskaper eller från att lägga till egenskaper i ett Update-TypeData kommando rapporterar inte fel till StdErr. Detta är för att förhindra undantag som skulle inträffa i många vanliga typer under formatering och utdata. Om du får .NET-egenskaper kan du kringgå undertryckningen av undantag med hjälp av metodsyntax i stället, som du ser i följande exempel:

"hello".get_Length()

Observera att metodsyntax endast kan användas med .NET-egenskaper. Egenskaper som läggs till genom att köra cmdleten Update-TypeData kan inte använda metodsyntax.

Signera en Types.ps1xml-fil

För att skydda användarna av filen Types.ps1xml kan du signera filen med hjälp av en digital signatur. Mer information finns i about_Signing.

Se även