about_Type_Operators
Rövid leírás
A Microsoft .NET-típusokkal dolgozó operátorokat ismerteti.
Hosszú leírás
A logikai típusú operátorok (-is
és -isnot
) jelzik, hogy egy objektum egy megadott .NET-típus példánya-e. Az -is
operátor igaz értéket ad vissza, ha a típus egyezik, és a FAL értéket Standard kiadás ellenkező esetben. Az -isnot
operátor a FAL értéket adja vissza Standard kiadás ha a típus egyezik, és ellenkező esetben igaz értéket ad vissza.
Az -as
operátor megpróbálja átalakítani a bemeneti objektumot a megadott .NET-típusra. Ha sikeres, a konvertált objektumot adja vissza. Ha nem sikerül, akkor a visszaadott $null
érték. Nem ad vissza hibát.
A PowerShell a következő típusműveleteket tartalmazza:
-is
|IGAZ értéket ad vissza, ha a bemenet a megadott .NET-típus egy példánya.(get-date) -is [DateTime] # Result is True
-isnot
|IGAZ értéket ad vissza, ha a bemenet nem a specified.NET típusú példány.(get-date) -isnot [DateTime] # Result is False
-as
|A bemenetet a megadott .NET-típusra konvertálja."5/7/07" -as [DateTime] # Result is Monday, May 7, 2007 12:00:00 AM
A típusoperátorok szintaxisa a következő:
<input> <operator> [.NET type]
A következő szintaxist is használhatja:
<input> <operator> ".NET type"
A .NET-típus típusnévként zárójelben vagy sztringben írható, például [DateTime]
"DateTime"
System.DateTime esetén. Ha a típus nem a rendszernévtér gyökerénél található, adja meg az objektumtípus teljes nevét. Kihagyhatja a "System"-t. Például a System.Diagnostics.Process megadásához adja meg az , [Diagnostics.Process]
[System.Diagnostics.Process]
vagy "Diagnostics.Process"
.
A típusműveletek mindig a bemeneti objektum egészén működnek. Vagyis ha a bemeneti objektum gyűjtemény, akkor az a vizsgált gyűjteménytípus , nem pedig a gyűjtemény elemeinek típusai.
-is/isot operátorok
A logikai típusú operátorok (-is
és -isnot
) mindig logikai értéket adnak vissza, még akkor is, ha a bemenet objektumgyűjtemény.
Ha <input>
olyan típus, amely megegyezik a .NET-típussal, vagy abból származik , az operátor ad -is
vissza $True
.
A DirectoryInfo típus például a FileSystemInfo típusból származik. Ezért mindkét példa Igaz értéket ad vissza.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
Az -is
operátor akkor is megfelelhet az illesztőknek, ha az összehasonlításban az <input>
illesztőt implementálja. Ebben a példában a bemenet egy tömb. A tömbök implementálják a System.Collections.IList felületet.
PS> 1, 2 -is [System.Collections.IList]
True
-as Üzemeltető
Az -as
operátor megpróbálja átalakítani a bemeneti objektumot a megadott .NET-típusra. Ha sikeres, a konvertált objektumot adja vissza. Ha nem sikerül, visszaadja $null
a . Nem ad vissza hibát.
Ha a <input>
.NET-típusból -as
származtatott típus változatlanul adja vissza a bemeneti objektumot. A DirectoryInfo típus például a FileSystemInfo típusból származik. Ezért az objektumtípus nem változik a következő példában:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
A DateTime-típus konvertálása kulturális szempontból érzékeny
A típusöntéstől eltérően az -as
operátor használatával történő típusra konvertálás [DateTime]
csak az aktuális kultúra szabályai szerint formázott sztringekkel működik.
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."
Az objektum .NET-típusának megkereséséhez használja a Get-Member
parancsmagot. Vagy használja az összes objektum GetType metódusát a metódus FullName tulajdonságával együtt. A következő utasítás például egy parancs visszatérési értékének Get-Culture
típusát kapja meg:
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
Példák
Az alábbi példák a Típus operátorok néhány használatát mutatják be:
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
Az alábbi példa azt mutatja be, hogy ha a bemenet objektumgyűjtemény, akkor az egyező típus a gyűjtemény .NET-típusa, nem pedig a gyűjtemény egyes objektumainak típusa.
Ebben a példában bár mind a parancsmagok, mind a Get-Culture
Get-UICulture
parancsmagok System.Globalization.CultureInfo objektumokat adnak vissza, ezeknek az objektumoknak a gyűjteménye egy System.Object tömb.
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
Az alábbi példák bemutatják az -as
operátor használatát.
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)
Az alábbi példa azt mutatja be, hogy ha az -as
operátor nem tudja konvertálni a bemeneti objektumot .NET-típusra, akkor az eredmény $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: