Dela via


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 $Trueoperatorn -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 -aspasserar 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>

SE ÄVEN

about_Operators