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 inTypes.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 inTypes.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-TypeData
finns 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 LägeSystem.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>
Medlemsuppsättning
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 standardegenskapsuppsättning och en standardvisningsegenskap . Den definierar standardegenskapsuppsättningen som egenskaperna Status, Namn och DisplayName . Den definierar standardvisningsegenskapen som Namn.
<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>
<NoteProperty>
<Name>DefaultDisplayProperty</Name>
<Value>Name</Value>
</NoteProperty>
</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.
Types.ps1xml
I <PropertySet>
anvä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 ConvertToDateTime
för hanteringsobjekt (ConvertFromDateTime
) är till exempel System.System.Management.ManagementObject
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.