about_Types.ps1xml
Krátký popis
Vysvětluje, jak pomocí Types.ps1xml
souborů rozšířit typy objektů, které se používají v PowerShellu.
Dlouhý popis
Rozšířená data typu definují další vlastnosti a metody ("členy") typů objektů v PowerShellu. Existují dvě techniky přidání rozšířených dat typu do relace PowerShellu.
Types.ps1xml
soubor: Soubor XML, který definuje data rozšířeného typu.Update-TypeData
: Rutina, která znovu načteTypes.ps1xml
soubory a definuje rozšířená data pro typy v aktuální relaci.
Toto téma popisuje Types.ps1xml
soubory. Další informace o použití rutiny Update-TypeData
k přidání dynamických rozšířených dat typu do aktuální relace naleznete v tématu Update-TypeData.
Informace o rozšířených datech typů
Rozšířená data typu definují další vlastnosti a metody ("členy") typů objektů v PowerShellu. Můžete rozšířit libovolný typ podporovaný prostředím PowerShell a použít přidané vlastnosti a metody stejným způsobem jako vlastnosti definované v typech objektů.
PowerShell například přidá vlastnost DateTime do všech System.DateTime
objektů, jako jsou například ty, které rutina Get-Date
vrátí.
(Get-Date).DateTime
Sunday, January 29, 2012 9:43:57 AM
Vlastnost DateTime nenajdete v popisu struktury System.DateTime, protože PowerShell tuto vlastnost přidá a zobrazí se jenom v PowerShellu.
PowerShell interně definuje výchozí sadu rozšířených typů. Tyto informace o typu se načtou v každé relaci PowerShellu při spuštění. Vlastnost DateTime je součástí této výchozí sady. Před PowerShellem 6 byly definice typu uloženy Types.ps1xml
v instalačním adresáři PowerShellu ($PSHOME
).
Přidání rozšířených dat typů do PowerShellu
V relacích PowerShellu existují tři zdroje rozšířených dat typu.
Rozšířená data typu jsou definována prostředím PowerShell a automaticky se načtou do každé relace PowerShellu. Počínaje PowerShellem 6 se tyto informace kompilují do PowerShellu
Types.ps1xml
a už se nedoručují do souboru.Soubory
Types.ps1xml
, které moduly exportují, se načtou při importu modulu do aktuální relace.Rozšířená data typu definovaná pomocí rutiny
Update-TypeData
se přidají pouze do aktuální relace. Neuloží se do souboru.
V relaci se rozšířená data typu ze tří zdrojů použijí na objekty stejným způsobem a jsou k dispozici pro všechny objekty zadaných typů.
Rutiny TypeData
Následující rutiny jsou součástí modulu Microsoft.PowerShell.Utility v PowerShellu 3.0 a novějším.
Get-TypeData
: Získá rozšířená data typu v aktuální relaci.Update-TypeData
: Znovu načteTypes.ps1xml
soubory. Přidá do aktuální relace rozšířená data typu.Remove-TypeData
: Odebere rozšířená data typu z aktuální relace.
Další informace o těchto rutinách najdete v tématu nápovědy pro každou rutinu.
Předdefinované soubory Types.ps1xml
Soubory Types.ps1xml
v $PSHOME
adresáři se automaticky přidají do každé relace.
Soubor Types.ps1xml
v instalačním adresáři PowerShellu ($PSHOME
) je textový soubor založený na jazyce XML, který umožňuje přidat vlastnosti a metody do objektů, které se používají v PowerShellu. PowerShell obsahuje integrované Types.ps1xml
soubory, které do typů .NET přidávají několik prvků, ale můžete vytvořit další Types.ps1xml
soubory pro další rozšíření typů.
Například ve výchozím nastavení mají objekty pole (System.Array
) vlastnost Length , která uvádí počet objektů v poli. Vzhledem k tomu, že název Length vlastnost jasně nepopisuje, PowerShell přidá vlastnost aliasu s názvem Count , která zobrazuje stejnou hodnotu. Následující kód XML přidá do System.Array
typu vlastnost Count.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
Pokud chcete získat nový AliasProperty, použijte Get-Member
příkaz na libovolném poli, jak je znázorněno v následujícím příkladu.
Get-Member -InputObject (1,2,3,4)
Příkaz vrátí následující výsledky.
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)
# ...
V důsledku toho můžete v PowerShellu použít vlastnost Count nebo vlastnost Length polí. Příklad:
(1, 2, 3, 4).count
4
(1, 2, 3, 4).length
4
Vytváření nových souborů Types.ps1xml
Soubory .ps1xml
nainstalované pomocí PowerShellu jsou digitálně podepsané, aby se zabránilo manipulaci, protože formátování může obsahovat bloky skriptů. Proto pokud chcete do typu .NET přidat vlastnost nebo metodu, vytvořte vlastní Types.ps1xml
soubory a pak je přidejte do relace PowerShellu.
Pokud chcete vytvořit nový soubor, začněte zkopírováním existujícího Types.ps1xml
souboru. Nový soubor může mít libovolný název, ale musí mít příponu .ps1xml
názvu souboru. Nový soubor můžete umístit do libovolného adresáře, který je přístupný pro PowerShell, ale je užitečné umístit soubory do instalačního adresáře PowerShellu ($PSHOME
) nebo do podadresáře instalačního adresáře.
Po uložení nového souboru použijte rutinu Update-TypeData
k přidání nového souboru do relace PowerShellu. Pokud chcete, aby vaše typy měli přednost před předdefinovanými typy, použijte parametr PrependData rutiny Update-TypeData
. Update-TypeData
ovlivňuje pouze aktuální relaci. Pokud chcete provést změnu všech budoucích relací, vyexportujte konzolu Update-TypeData
nebo přidejte příkaz do profilu PowerShellu.
Types.ps1xml a Add-Member
Soubory Types.ps1xml
přidávají vlastnosti a metody do všech instancí objektů zadaného typu .NET v ovlivněné relaci PowerShellu. Pokud ale potřebujete přidat vlastnosti nebo metody pouze do jedné instance objektu, použijte rutinu Add-Member
.
Další informace naleznete v tématu Přidání člena.
Příklad: Přidání člena věku do objektů FileInfo
Tento příklad ukazuje, jak přidat Age vlastnost System.IO.FileInfo objekty. Stáří souboru je rozdíl mezi časem jeho vytvoření a aktuálním časem ve dnech.
Vzhledem k tomu, že vlastnost Age se počítá pomocí bloku skriptu, najděte <ScriptProperty>
značku, která se má použít jako model pro novou vlastnost Age .
Uložte následující kód XML do souboru $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>
Spuštěním příkazu Update-TypeData
přidejte nový Types.ps1xml
soubor do aktuální relace. Příkaz používá parametr PrependData k umístění nového souboru do pořadí přednosti vyšší než původní definice.
Další informace o Update-TypeData
nástroji Update-TypeData naleznete v tématu Update-TypeData.
Update-Typedata -PrependPath $PSHOME\MyTypes.ps1xml
Pokud chcete změnu otestovat, spuštěním Get-ChildItem
příkazu získejte soubor PowerShell.exe v $PSHOME
adresáři a potom soubor předejte rutině Format-List
, aby se vypsaly všechny vlastnosti souboru. V důsledku změny se v seznamu zobrazí vlastnost Age .
Get-ChildItem $PSHOME\pwsh.exe | Select-Object Age
142
XML v souborech Types.ps1xml
Úplnou definici schématu najdete v type.xsd v úložišti zdrojového kódu PowerShellu na GitHubu.
Značka <Types>
uzavře všechny typy, které jsou definovány v souboru. Měla by existovat jenom jedna <Types>
značka.
Každý typ .NET uvedený v souboru by měl být reprezentován značkou <Type>
.
Značky typu musí obsahovat následující značky:
<Name>
: Uzavře název ovlivněného typu .NET.
<Members>
: Uzavře značky pro nové vlastnosti a metody definované pro typ .NET.
Uvnitř značky může být <Members>
libovolná z následujících značek členů.
AliasProperty
Definuje nový název existující vlastnosti.
Značka <AliasProperty>
musí mít <Name>
značku, která určuje název nové vlastnosti a <ReferencedMemberName>
značku, která určuje existující vlastnost.
Například vlastnost Alias Count je alias pro length vlastnost array objekty.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
CodeMethod
Odkazuje na statickou metodu třídy .NET.
Značka <CodeMethod>
musí mít <Name>
značku, která určuje název nové metody a <CodeReference>
značku, která určuje kód, ve kterém je metoda definována.
Například ToString metoda je název definice kódu 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
Odkazuje na statickou metodu třídy .NET.
Značka <CodeProperty>
musí mít <Name>
značku, která určuje název nové vlastnosti a <GetCodeReference>
značku, která určuje kód, ve kterém je vlastnost definována.
Například Vlastnost Mode objektů je vlastnost System.IO.DirectoryInfo
kódu definovaná ve zprostředkovateli systému souborů PowerShellu.
<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
Definuje kolekci členů (vlastností a metod).
Značky <MemberSet>
se zobrazí v primárních <Members>
značkách. Značky musí ohraničovat <Name>
značku obklopící název sady členů a sekundární <Members>
značku, která obklopuje členy (vlastnosti a metody) v sadě. Každá ze značek, která vytváří vlastnost (například <NoteProperty>
nebo <ScriptProperty>
) nebo metodu (například <Method>
nebo <ScriptMethod>
) může být členy sady.
V Types.ps1xml
souborech <MemberSet>
se značka používá k definování výchozích zobrazení objektů .NET v PowerShellu. V tomto případě je název sady členů (hodnota v rámci <Name>
značek) vždy PsStandardMembers a názvy vlastností (hodnota <Name>
značky) jsou jedním z následujících:
DefaultDisplayProperty
: Jedna vlastnost objektu.DefaultDisplayPropertySet
: Jedna nebo více vlastností objektu.DefaultKeyPropertySet
: Jedna nebo více klíčových vlastností objektu. Vlastnost klíče identifikuje instance hodnot vlastností, jako je počet ID položek v historii relace.
Například následující XML definuje výchozí zobrazení služeb (System.ServiceProcess.ServiceController
objektů), které vrací rutina Get-Service
. Definuje členovou sadu s názvem PsStandardMembers, která se skládá z výchozí sady vlastností Status, Name a DisplayName vlastnosti.
<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>
: Odkazuje na nativní metodu základního objektu.
<Methods>
: Kolekce metod objektu.
PoznámkaProperty
Definuje vlastnost se statickou hodnotou.
Značka <NoteProperty>
musí mít <Name>
značku, která určuje název nové vlastnosti a <Value>
značku, která určuje hodnotu vlastnosti.
Například následující XML vytvoří vlastnost Status pro Objekty System.IO.DirectoryInfo . Hodnota vlastnosti Status je vždy Úspěch.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
PropertySet
Vlastnosti, které přebírají argumenty a vrací hodnotu.
<Properties>
: Kolekce vlastností objektu.
<Property>
: Vlastnost základního objektu.
<PropertySet>
: Definuje kolekci vlastností objektu.
Značka <PropertySet>
musí mít <Name>
značku, která určuje název sady vlastností a <ReferencedProperty>
značku, která určuje vlastnosti. Názvy vlastností jsou uzavřeny do <Name>
značky.
V Types.ps1xml
, <PropertySet>
značky slouží k definování sad vlastností pro výchozí zobrazení objektu. Výchozí hodnoty PsStandardMembers můžete identifikovat ve <Name>
značce <MemberSet>
značky.
Například následující XML vytvoří PropertySet s názvem DefaultDisplayPropertySet se třemi 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>
SkriptMethod
Definuje metodu, jejíž hodnota je výstupem skriptu.
Značka <ScriptMethod>
musí mít <Name>
značku, která určuje název nové metody a <Script>
značku, která uzavře blok skriptu, který vrací výsledek metody.
Například ConvertToDateTime
a ConvertFromDateTime
metody objektů správy (System.System.Management.ManagementObject
) jsou metody skriptu, které používají ToDateTime
a ToDmtfDateTime
statické metody System.Management.ManagementDateTimeConverter
třídy.
<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
Definuje vlastnost, jejíž hodnota je výstupem skriptu.
Značka <ScriptProperty>
musí mít <Name>
značku, která určuje název nové vlastnosti a <GetScriptBlock>
značku, která uzavře blok skriptu, který vrací hodnotu vlastnosti.
Například VersionInfo Vlastnost System.IO.FileInfo objektu je vlastnost skriptu, která je výsledkem použití FullName Vlastnost GetVersionInfo static metoda System.Diagnostics.FileVersionInfo objekty.
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>
<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
Další informace najdete v sadě Windows PowerShell Software Development Kit (SDK).
Update-TypeData
Pokud chcete načíst Types.ps1xml
soubory do relace PowerShellu, spusťte rutinu Update-TypeData
. Pokud chcete, aby typy v souboru přednost před typy v předdefinovaném Types.ps1xml
souboru, přidejte parametr PrependData .Update-TypeData
Update-TypeData
ovlivňuje pouze aktuální relaci. Pokud chcete provést změnu všech budoucích relací, exportujte relaci nebo přidejte Update-TypeData
příkaz do profilu PowerShellu.
Výjimky, ke kterým dochází ve vlastnostech nebo při přidávání vlastností do Update-TypeData
příkazu, neoznamují chyby .StdErr
To je potlačení výjimek, které by se vyskytly v mnoha běžných typech při formátování a výstupu. Pokud získáváte vlastnosti rozhraní .NET, můžete místo toho obejít potlačení výjimek pomocí syntaxe metody, jak je znázorněno v následujícím příkladu:
"hello".get_Length()
Všimněte si, že syntaxi metody lze použít pouze s vlastnostmi .NET. Vlastnosti přidané spuštěním rutiny nemůžou Update-TypeData
používat syntaxi metody.
Podepsání souboru Types.ps1xml
Pokud chcete chránit uživatele souboru Types.ps1xml
, můžete ho podepsat pomocí digitálního podpisu. Další informace najdete v tématu about_Signing.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro