Om typoperatorer
KORT BESKRIVNING
Beskriver de operatorer som fungerar med Microsoft .NET-typer.
LÅNG BESKRIVNING
Operatorerna för boolesk typ (-is
och -isNot
) anger om ett objekt är en instans av en angiven .NET-typ. Operatorn -is
returnerar värdet TRUE om typen matchar och värdet FALSE annars. Operatorn -isNot
returnerar värdet FALSE om typen matchar och värdet TRUE annars.
Operatorn -as
försöker konvertera indataobjektet till den angivna .NET-typen. Om det lyckas returneras det konverterade objektet. Om det misslyckas returneras $null
. Det returnerar inget fel.
I följande tabell visas typoperatorerna i PowerShell.
Operator | Beskrivning | Exempel |
---|---|---|
-is |
Returnerar TRUE när indata | (get-date) -is [DateTime] |
är en instans av | True |
|
angiven .NET-typ. | ||
-isNot |
Returnerar TRUE när indata | (get-date) -isNot [DateTime] |
inte en instans av | False |
|
specified.NET typ. | ||
-as |
Konverterar indata till | "5/7/07" -as [DateTime] |
angiven .NET-typ. | Monday, May 7, 2007 12:00:00 AM |
Syntaxen för typoperatorerna är följande:
<input> <operator> [.NET type]
Du kan också använda följande syntax:
<input> <operator> ".NET type"
.NET-typen kan skrivas som ett typnamn inom hakparenteser eller en sträng, till exempel [DateTime]
eller "DateTime"
för System.DateTime. Om typen inte finns i roten för systemnamnområdet anger du det fullständiga namnet på objekttypen. Du kan utelämna "System". Om du till exempel vill ange System.Diagnostics.Process anger du [System.Diagnostics.Process]
, [Diagnostics.Process]
eller "Diagnostics.Process"
.
Typoperatorerna fungerar alltid på indataobjektet som helhet. Om indataobjektet är en samling är det alltså samlingstypen som testas, inte typerna av samlingens element.
-is/isNot-operatorer
Operatorerna för boolesk typ (-is
och -isNot
) returnerar alltid ett booleskt värde, även om indata är en samling objekt.
Om <input>
är en typ som är samma som eller härleds från .NET-typen returnerar $True
operatorn -is
.
Till exempel härleds typen DirectoryInfo från typen FileSystemInfo . Därför returnerar båda dessa exempel True.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
Operatorn -is
kan också matcha gränssnitt om <input>
implementerar gränssnittet i jämförelsen. I det här exemplet är indata en matris. Matriser implementerar gränssnittet System.Collections.IList .
PS> 1, 2 -is [System.Collections.IList]
True
-as-operatorn
Operatorn -as
försöker konvertera indataobjektet till den angivna .NET-typen. Om det lyckas returneras det konverterade objektet. Om det misslyckas returneras $null
. Det returnerar inget fel.
<input>
Om är en typ som härleds från .NET-typen -as
passerar genom returneras indataobjektet oförändrat. Till exempel härleds typen DirectoryInfo från typen FileSystemInfo . Därför är objekttypen oförändrad i följande exempel:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
Konvertering av DateTime-typen är kulturkänsligt
Till skillnad från typkonvertering fungerar konvertering till [DateTime]
typ med operatorn -as
endast med strängar som är formaterade enligt den aktuella kulturens regler.
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."
Använd cmdleten Get-Member
för att hitta .NET-typen för ett objekt. Du kan också använda metoden GetType för alla objekt tillsammans med egenskapen FullName för den här metoden. Följande instruktion hämtar till exempel typen av returvärde för ett Get-Culture
kommando:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
EXEMPEL
I följande exempel visas några användningsområden för typoperatorerna:
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
I följande exempel visas att när indata är en samling objekt är den matchande typen .NET-typen för samlingen, inte typen av enskilda objekt i samlingen.
I det här exemplet, även om både Get-Culture
cmdletarna och Get-UICulture
returnerar System.Globalization.CultureInfo-objekt , är en samling av dessa objekt en System.Object-matris.
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
I följande exempel visas hur du använder operatorn -as
.
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)
I följande exempel visas att när operatorn -as
inte kan konvertera indataobjektet till .NET-typen returneras $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>