Dela via


Om 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å 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 cmdleten Update-TypeData för att lägga till dynamiska utökade typdata i den aktuella sessionen finns i Update-TypeData.

Om utökade typdata

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 Strukturen System.DateTime 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.

  • 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.

  • De Types.ps1xml filer 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 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 .NET-typerna Types.ps1xml , men du kan skapa ytterligare Types.ps1xml filer för att ytterligare utöka typerna.

Till exempel har matrisobjekt (System.Array) som standard 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 i 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 antingen egenskapen Count eller egenskapen Length för matriser i PowerShell. Exempel:

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

Skapa nya Types.ps1xml-filer

De .ps1xml filer 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 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 har definierats 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 Add-Member (Lägg till medlem).

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

Det här exemplet visar hur du lägger till en Age-egenskap i System.IO.FileInfo-objekt . En fils ålder är skillnaden mellan dess skapandetid och aktuell tid 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 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 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 skicka sedan filen till cmdleten Format-List för att visa en lista över 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> omger 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 egenskaperna och metoderna 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 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 i en .NET-klass.

Taggen <CodeMethod> måste ha en <Name> tagg som anger namnet på den nya metoden och en <GetCodeReference> tagg som anger den kod som metoden definieras i.

Egenskapen System.IO.DirectoryInfoMode 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>

<CodeProperty>: Refererar till en statisk metod i 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 där egenskapen definieras.

Egenskapen System.IO.DirectoryInfoMode 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 omge 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 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 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>

<ParameterizedProperty>: 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 standardvisning av ett objekt. Du kan identifiera standardskärmarna med värdet PsStandardMembers i taggen <Name> för en <MemberSet> tagg.

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

<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 för 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 ToDateTimeToDmtfDateTime och statiska metoder för 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 för 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 PowerShell-profilen.

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å undertryckning 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

Om du vill 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

about_Signing

Copy-Item

Copy-ItemProperty

Get-Member

Get-TypeData

Remove-TypeData

Update-TypeData