about_Type_Operators
Krátký popis
Popisuje operátory, které pracují s typy Microsoft .NET.
Dlouhý popis
Logické operátory typu (-is
a -isnot
) říkají, zda je objekt instancí zadaného typu .NET. Operátor -is
vrátí hodnotu PRAVDA , pokud typ odpovídá a hodnota NEPRAVDA v opačném případě. Operátor -isnot
vrátí hodnotu NEPRAVDA , pokud typ odpovídá a hodnota PRAVDA v opačném případě.
Operátor -as
se pokusí převést vstupní objekt na zadaný typ .NET. Pokud bude úspěšný, vrátí převedený objekt. Pokud selže, vrátí $null
. Nevrací chybu.
PowerShell má následující operátory typu:
-is
|Vrátí hodnotu TRUE, pokud je vstup instancí zadaného typu .NET.(get-date) -is [DateTime] # Result is True
-isnot
|Vrátí hodnotu TRUE, pokud vstup není instancí typu specified.NET.(get-date) -isnot [DateTime] # Result is False
-as
|Převede vstup na zadaný typ .NET."5/7/07" -as [DateTime] # Result is Monday, May 7, 2007 12:00:00 AM
Syntaxe operátorů typu je následující:
<input> <operator> [.NET type]
Můžete také použít následující syntaxi:
<input> <operator> ".NET type"
Typ .NET lze zapsat jako název typu v hranatých závorkách nebo řetězci, jako [DateTime]
"DateTime"
je system.DateTime. Pokud typ není v kořenovém adresáři systémového oboru názvů, zadejte úplný název typu objektu. Můžete vynechat "Systém". Chcete-li například zadat System.Diagnostics.Process, zadejte [System.Diagnostics.Process]
, [Diagnostics.Process]
nebo "Diagnostics.Process"
.
Operátory typu vždy pracují se vstupním objektem jako celku. To znamená, že pokud je vstupním objektem kolekce, jedná se o typ kolekce, který je testován, nikoli typy prvků kolekce.
Operátory -is/isnot
Logické operátory typu (-is
a-isnot
) vždy vrací logickou hodnotu, i když vstup je kolekce objektů.
Je-li <input>
typ, který je stejný jako nebo je odvozen z typu .NET, -is
vrátí $True
operátor .
Typ DirectoryInfo je například odvozen z typu FileSystemInfo. Oba tyto příklady proto vrací hodnotu True.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
Operátor -is
se také může shodovat s rozhraním, pokud <input>
implementuje rozhraní v porovnání. V tomto příkladu je vstup pole. Pole implementují rozhraní System.Collections.IList .
PS> 1, 2 -is [System.Collections.IList]
True
-as Operátor
Operátor -as
se pokusí převést vstupní objekt na zadaný typ .NET. Pokud bude úspěšný, vrátí převedený objekt. Pokud selže, vrátí $null
. Nevrací chybu.
<input>
Pokud je typ odvozenýz typu -as
.NET prochází, vrátí vstupní objekt beze změny. Typ DirectoryInfo je například odvozen z typu FileSystemInfo. Proto se typ objektu nezmění v následujícím příkladu:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
Převod typu DateTime je citlivý na jazykovou verzi.
Na rozdíl od přetypování typů funguje převod na [DateTime]
typ pomocí operátoru -as
pouze s řetězci, které jsou formátovány podle pravidel aktuální jazykové verze.
PS> [cultureinfo]::CurrentCulture = 'fr-FR'
PS> '13/5/20' -as [datetime]
mercredi 13 mai 2020 00:00:00
PS> '05/13/20' -as [datetime]
PS> [datetime]'05/13/20'
mercredi 13 mai 2020 00:00:00
PS> [datetime]'13/05/20'
InvalidArgument: Cannot convert value "13/05/20" to type "System.DateTime".
Error: "String '13/05/20' was not recognized as a valid DateTime."
K vyhledání typu .NET objektu použijte rutinu Get-Member
. Nebo použijte GetType metoda všech objektů společně s FullName vlastnost této metody. Například následující příkaz získá typ návratové hodnoty Get-Culture
příkazu:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
Příklady
Následující příklady ukazují některé použití operátorů type:
PS> 32 -is [Float]
False
PS> 32 -is "int"
True
PS> (get-date) -is [DateTime]
True
PS> "12/31/2007" -is [DateTime]
False
PS> "12/31/2007" -is [String]
True
PS> (get-process PowerShell)[0] -is [System.Diagnostics.Process]
True
PS> (get-command get-member) -is [System.Management.Automation.CmdletInfo]
True
Následující příklad ukazuje, že když vstup je kolekce objektů, odpovídající typ je typ .NET kolekce, nikoli typ jednotlivých objektů v kolekci.
V tomto příkladu Get-Culture
Get-UICulture
sice rutiny vrací objekty System.Globalization.CultureInfo , ale kolekce těchto objektů je pole System.Object.
PS> (get-culture) -is [System.Globalization.CultureInfo]
True
PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True
PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False
PS> (get-culture), (get-uiculture) -is [Array]
True
PS> (get-culture), (get-uiculture) | foreach {
$_ -is [System.Globalization.CultureInfo])
}
True
True
PS> (get-culture), (get-uiculture) -is [Object]
True
Následující příklady ukazují, jak používat -as
operátor.
PS> "12/31/07" -is [DateTime]
False
PS> "12/31/07" -as [DateTime]
Monday, December 31, 2007 12:00:00 AM
PS> $date = "12/31/07" -as [DateTime]
C:\PS>$a -is [DateTime]
True
PS> 1031 -as [System.Globalization.CultureInfo]
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
Následující příklad ukazuje, že pokud -as
operátor nemůže převést vstupní objekt na typ .NET, vrátí $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>
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