about_Type_Operators

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 .

Typen DirectoryInfo härleds till exempel 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-operator

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 returnerar indataobjektet oförändrat. Typen DirectoryInfo härleds till exempel 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 typgjutning fungerar konvertering till [DateTime] typ med operatorn -as endast med strängar som är formaterade enligt reglerna i den aktuella kulturen.

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."

Om du vill hitta .NET-typen för ett objekt använder du cmdleten Get-Member . 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ändningar av operatorerna Typ:

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

Följande exempel visar 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)

Följande exempel visar 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