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") av objekttyper i PowerShell. Det finns två metoder 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 på nytt 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 Update-TypeData cmdleten för att lägga till dynamiska utökade typdata till den aktuella sessionen finns i Update-TypeData.

Om utökade typdata

Utökade typdata definierar ytterligare egenskaper och metoder ("medlemmar") av 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 objekt, till exempel System.DateTime de som Get-Date cmdleten returnerar.

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

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

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

Lägga till utökade typdata i PowerShell

Det finns tre källor med utökade datatyper 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 Update-TypeData cmdleten läggs endast till i den aktuella sessionen. Den sparas inte i en fil.

I sessionen tillämpas 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-cmdlets

Följande cmdlets 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 på nytt. 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 cmdlets finns i hjälpavsnittet för varje cmdlet.

Inbyggda XML-Types.ps1filer

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

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

Som standard har till exempel matrisobjekt ( System.Array ) en Length-egenskap som visar antalet objekt i matrisen. Men eftersom namnet Length 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 den nya AliasProperty använder du Get-Member ett kommando i 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 antingen egenskapen Count eller length-egenskapen för matriser i PowerShell. Ett exempel:

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

Skapa nya xmlTypes.ps1filer

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 till en .NET-typ skapar du därför egna filer och Types.ps1xml 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 vilket namn som helst, men den måste ha .ps1xml ett 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 ( ) eller i en underkatalog i $PSHOME installationskatalogen.

När du har sparat den nya filen använder du Update-TypeData cmdleten 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 typerna som har definierats använder du parametern PrependData för Update-TypeData cmdleten . 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 Update-TypeData kommandot i din PowerShell-profil.

Types.ps1xml och Add-Member

Filerna lägger till egenskaper och metoder till alla instanser av objekten av den angivna Types.ps1xml .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 Add-Member cmdleten .

Mer information finns i Add-Member.

Exempel: Lägga till en Age-medlem till FileInfo-objekt

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

Eftersom egenskapen Age beräknas med hjälp av ett skriptblock hittar du en <ScriptProperty> tagg som ska användas som modell för den nya Age-egenskapen.

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 filen i den aktuella Types.ps1xml sessionen. Kommandot använder parametern PrependData för att placera den nya filen i en prioritetsordning som är högre än de ursprungliga definitionerna.

Mer information om Update-TypeData finns i Update-TypeData.

Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml

Testa ändringen genom att köra ett kommando för att hämta PowerShell.exe-filen i katalogen och sedan skicka filen till Get-ChildItem $PSHOME cmdleten för att lista alla egenskaper för Format-List filen. På grund av ändringen visas egenskapen Age i listan.

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

XML-filen i Types.ps1xml-filer

Den fullständiga schemadefinitionen finns i Types.xsd i PowerShell-källkodsdatabasen 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.

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

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

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

Alla följande medlemstaggar kan finnas i <Members> taggen .

AliasEgenskaper

Definierar ett nytt namn för en befintlig egenskap.

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

Aliasegenskapen Count är till exempel ett alias för egenskapen Length 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 måste ha en tagg som anger namnet på den nya metoden och en tagg som anger <CodeMethod> <Name> koden som metoden <CodeReference> definieras i.

ToString-metoden ä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 måste ha en tagg som anger namnet på den nya egenskapen och en tagg som anger koden <CodeProperty> <Name> som egenskapen <GetCodeReference> definieras i.

Egenskapen Mode för objekt är till exempel System.IO.DirectoryInfo 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 omge en tagg som omger namnet på medlemsuppsättningen och en sekundär tagg som omger medlemmarna (egenskaper och <Name> <Members> metoder) i uppsättningen. Alla taggar som skapar en egenskap (till exempel <NoteProperty> eller ) eller en metod <ScriptProperty> (till exempel eller ) kan <Method> vara medlemmar i <ScriptMethod> uppsättningen.

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

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

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

  • DefaultKeyPropertySet: En eller flera nyckelegenskaper 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 Get-Service cmdleten . Den definierar en medlemsuppsättning med namnet PsStandardMembers som består av en standardegenskap 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 metoder för -objektet.

NoteProperty

Definierar en egenskap med ett statiskt värde.

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

Följande XML skapar till exempel en Status-egenskap 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 egenskaperna för objektet.

<Property>: En egenskap för basobjektet.

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

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

I Types.ps1xml används taggar för att definiera <PropertySet> uppsättningar egenskaper för standardvisningen av ett objekt. Du kan identifiera standardvärdena som visas med värdet PsStandardMembers i <Name> taggen för 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 måste ha en tagg som anger namnet på den nya metoden och en tagg som omsluter <ScriptMethod> <Name> <Script> skriptblocket som returnerar metodresultatet.

Metoderna och för hanteringsobjekt ( ) är till exempel ConvertToDateTime ConvertFromDateTime System.System.Management.ManagementObject skriptmetoder som använder ToDateTime de ToDmtfDateTime statiska metoderna och i System.Management.ManagementDateTimeConverter klassen .

<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 måste ha en tagg som anger namnet på den nya egenskapen och en tagg som omsluter <ScriptProperty> <Name> <GetScriptBlock> skriptblocket som returnerar egenskapsvärdet.

Egenskapen VersionInfo för objektet System.IO.FileInfo är till exempel en skriptegenskap som kommer från användningen av egenskapen FullName 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 Types.ps1xml läsa in filerna i en PowerShell-session kör du Update-TypeData cmdleten . Om du vill att typerna i filen ska ha företräde framför typerna i den inbyggda filen lägger du till Types.ps1xml parametern PrependData för Update-TypeData . Update-TypeData påverkar bara den aktuella sessionen. Om du vill göra ändringen i alla framtida sessioner exporterar du sessionen eller lägger till Update-TypeData kommandot i din PowerShell-profil.

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

"hello".get_Length()

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

Signera en xmlTypes.ps1fil

Du kan skydda användare av Types.ps1xml filen genom att signera den med en digital signatur. Mer information finns i about_Signing.

Se även

about_Signing

Kopiera objekt

Copy-ItemProperty

Hämta medlem

Get-TypeData

Remove-TypeData

Update-TypeData