about_Type_Operators

Deskripsi singkat

Menjelaskan operator yang bekerja dengan jenis Microsoft .NET.

Deskripsi panjang

Operator jenis Boolean (-is dan -isnot) memberi tahu apakah objek adalah instans dari jenis .NET tertentu. Operator -is mengembalikan nilai TRUE jika jenis cocok dan nilai FALSE jika tidak. Operator -isnot mengembalikan nilai FALSE jika jenis cocok dan nilai TRUE jika tidak.

Operator -as mencoba mengonversi objek input ke jenis .NET yang ditentukan. Jika berhasil, objek yang dikonversi akan dikembalikan. Jika gagal, ia akan mengembalikan $null. Ini tidak mengembalikan kesalahan.

PowerShell memiliki operator jenis berikut:

  • -is |Mengembalikan TRUE ketika input adalah instans dari jenis .NET yang ditentukan.

    (get-date) -is [DateTime]     # Result is True
    
  • -isnot|Mengembalikan TRUE saat input bukan instans jenis specified.NET.

    (get-date) -isnot [DateTime]  # Result is False
    
  • -as |Mengonversi input ke jenis .NET yang ditentukan.

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

Sintaks operator jenis adalah sebagai berikut:

<input> <operator> [.NET type]

Anda juga dapat menggunakan sintaks berikut:

<input> <operator> ".NET type"

Jenis .NET dapat ditulis sebagai nama jenis dalam tanda kurung atau string, seperti [DateTime] atau "DateTime" untuk System.DateTime. Jika jenis tidak berada di akar namespace layanan sistem, tentukan nama lengkap jenis objek. Anda dapat menghilangkan "Sistem.". Misalnya, untuk menentukan System.Diagnostics.Process, masukkan [System.Diagnostics.Process], , [Diagnostics.Process]atau "Diagnostics.Process".

Operator jenis selalu beroperasi pada objek input secara keseluruhan. Artinya, jika objek input adalah koleksi, itu adalah jenis koleksi yang diuji, bukan jenis elemen koleksi.

Operator -is/isnot

Operator jenis Boolean (-is dan -isnot) selalu mengembalikan nilai Boolean , bahkan jika input adalah kumpulan objek.

Jika <input> adalah jenis yang sama dengan atau berasal dari Jenis .NET, -is operator mengembalikan $True.

Misalnya, jenis DirectoryInfo berasal dari jenis FileSystemInfo . Oleh karena itu, kedua contoh ini mengembalikan True.

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

Operator -is juga dapat mencocokkan <input> antarmuka jika mengimplementasikan antarmuka dalam perbandingan. Dalam contoh ini, input adalah array. Array mengimplementasikan antarmuka System.Collections.IList .

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

-as operator

Operator -as mencoba mengonversi objek input ke jenis .NET yang ditentukan. Jika berhasil, objek yang dikonversi akan dikembalikan. Jika gagal, ia mengembalikan $null. Ini tidak mengembalikan kesalahan.

<input> Jika adalah jenis yang berasal dari Jenis -as.NET melewati mengembalikan objek input yang tidak berubah. Misalnya, jenis DirectoryInfo berasal dari jenis FileSystemInfo . Oleh karena itu, jenis objek tidak berubah dalam contoh berikut:

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

Mengonversi jenis DateTime peka terhadap budaya

Tidak seperti pengecoran jenis, mengonversi ke [DateTime] jenis menggunakan -as operator hanya berfungsi dengan string yang diformat sesuai dengan aturan budaya saat ini.

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

Untuk menemukan jenis .NET objek, gunakan Get-Member cmdlet . Atau, gunakan metode GetType dari semua objek bersama dengan properti FullName dari metode ini. Misalnya, pernyataan berikut mendapatkan jenis nilai pengembalian perintah Get-Culture :

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

Contoh

Contoh berikut menunjukkan beberapa penggunaan operator Jenis:

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

Contoh berikut menunjukkan bahwa ketika input adalah kumpulan objek, jenis pencocokan adalah jenis .NET dari koleksi, bukan jenis objek individual dalam koleksi.

Dalam contoh ini, meskipun Get-Culture cmdlet dan Get-UICulture mengembalikan objek System.Globalization.CultureInfo , kumpulan objek ini adalah array System.Object.

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

Contoh berikut menunjukkan cara menggunakan -as operator.

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)

Contoh berikut menunjukkan bahwa ketika -as operator tidak dapat mengonversi objek input ke jenis .NET, operator mengembalikan $null.

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

Lihat juga