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 returnerar $null
det . Det returnerar inte något fel.
PowerShell har följande typoperatorer:
-is
|Returnerar TRUE när indata är en instans av den angivna .NET-typen.(get-date) -is [DateTime] # Result is True
-isnot
|Returnerar TRUE när indata inte är en instans av den specified.NET typen.(get-date) -isnot [DateTime] # Result is False
-as
|Konverterar indata till den angivna .NET-typen."5/7/07" -as [DateTime] # Result is 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]
, eller ."Diagnostics.Process"
[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ärledsfrå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 Operatör
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 inte något fel.
<input>
Om är en typ som härledsfrån .NET-typen -as
passerar genom returnerar indataobjektet oförändrat. Till exempel härleds typen DirectoryInfo från typen FileSystemInfo . Därför ändras objekttypen inte 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ärdet 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 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 matchningstypen .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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för