about_Type_Operators

Kısa açıklama

Microsoft .NET türleriyle çalışan işleçleri açıklar.

Uzun açıklama

Boole türü işleçleri (-is ve -isnot) bir nesnenin belirtilen .NET türünün bir örneği olup olmadığını söyler. işleci, -is tür eşleşiyorsa TRUE değerini ve aksi takdirde YANLIŞ değerini döndürür. işleci, -isnot tür eşleşiyorsa YANLIŞ değerini ve aksi takdirde TRUE değerini döndürür.

işleci -as , giriş nesnesini belirtilen .NET türüne dönüştürmeye çalışır. Başarılı olursa, dönüştürülen nesneyi döndürür. Başarısız olursa döndürür $null. Hata döndürmez.

PowerShell aşağıdaki tür işleçlerine sahiptir:

  • -is |Giriş belirtilen .NET türünün bir örneği olduğunda TRUE döndürür.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Giriş specified.NET türünün bir örneği olmadığında TRUE döndürür.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Girişi belirtilen .NET türüne dönüştürür.

    "5/7/07" -as [DateTime]       # Result is Monday, May 7, 2007 12:00:00 AM
    

Tür işleçlerinin söz dizimi aşağıdaki gibidir:

<input> <operator> [.NET type]

Aşağıdaki söz dizimini de kullanabilirsiniz:

<input> <operator> ".NET type"

.NET türü, system.datetime gibi köşeli ayraçlar veya dizeler halinde bir tür adı olarak [DateTime]"DateTime" yazılabilir. Tür sistem ad alanının kökünde değilse, nesne türünün tam adını belirtin. "Sistem" ifadesini atlayabilirsiniz. Örneğin, System.Diagnostics.Process belirtmek için , [Diagnostics.Process]veya "Diagnostics.Process"girin[System.Diagnostics.Process].

Tür işleçleri her zaman giriş nesnesi üzerinde bir bütün olarak çalışır. Diğer bir ifadeyle, giriş nesnesi bir koleksiyonsa, koleksiyonun öğelerinin türleri değil, test edilen koleksiyon türüdür.

-is/isnot işleçleri

Giriş bir nesne koleksiyonu olsa bile Boole türü işleçleri (-is ve -isnot) her zaman bir Boole değeri döndürür.

ile aynı olan veya .NET Türünden türetilen bir türse <input>işleci -is döndürür$True.

Örneğin, DirectoryInfo türü FileSystemInfo türünden türetilir. Bu nedenle, bu örneklerin her ikisi de True döndürür.

PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True

işleci, -is karşılaştırmada arabirimi uygularsa <input> arabirimleri de eşleştirebilir. Bu örnekte giriş bir dizidir. Diziler System.Collections.IList arabirimini uygular.

PS> 1, 2 -is [System.Collections.IList]
True

-as Işleç

işleci -as , giriş nesnesini belirtilen .NET türüne dönüştürmeye çalışır. Başarılı olursa, dönüştürülen nesneyi döndürür. Başarısız olursa döndürür $null. Hata döndürmez.

<input>.NET Türünden -astüretilen bir türse, geçişler, giriş nesnesini değiştirmeden döndürür. Örneğin, DirectoryInfo türü FileSystemInfo türünden türetilir. Bu nedenle, nesne türü aşağıdaki örnekte değiştirilmez:

PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo

DateTime türünün dönüştürülmesi kültüre duyarlıdır

Tür dönüştürmeden farklı olarak, işlecini -as kullanarak türe [DateTime] dönüştürme yalnızca geçerli kültürün kurallarına göre biçimlendirilmiş dizelerle çalışır.

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

Bir nesnenin .NET türünü bulmak için cmdlet'ini Get-Member kullanın. Veya bu yöntemin FullName özelliğiyle birlikte tüm nesnelerin GetType yöntemini kullanın. Örneğin, aşağıdaki deyim bir Get-Culture komutun dönüş değerinin türünü alır:

PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo

Örnekler

Aşağıdaki örneklerde Tür işleçlerinin bazı kullanımları gösterilmektedir:

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

Aşağıdaki örnek, giriş bir nesne koleksiyonu olduğunda eşleşen türün koleksiyondaki tek tek nesnelerin türü değil, koleksiyonun .NET türü olduğunu gösterir.

Bu örnekte, hem hem de Get-CultureGet-UICulture cmdlet'leri System.Globalization.CultureInfo nesnelerini döndürse de, bu nesnelerin koleksiyonu bir System.Object dizisidir.

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

Aşağıdaki örneklerde işlecinin nasıl kullanılacağı gösterilmektedir -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)

Aşağıdaki örnekte, işleç giriş nesnesini .NET türüne dönüştüremediğinde değerini döndürdüğü $nullgösterilmektedir-as.

PS> 1031 -as [System.Diagnostics.Process]
PS>

Ayrıca bkz.