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.ps1xmlfil: En XML-fil som definierar utökade typdata.Update-TypeData: En cmdlet som läser inTypes.ps1xmlfiler 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.ps1xmlfil.Filerna
Types.ps1xmlsom moduler exporterar läses in när modulen importeras till den aktuella sessionen.Utökade typdata som definieras med hjälp av
Update-TypeDatacmdleten 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 inTypes.ps1xmlfiler 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.