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 $nulla . Nem ad vissza hibát.

Ha a <input> .NET-típusból -asszá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-CultureGet-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