about_Operators

Deskripsi singkat

Menjelaskan operator yang didukung oleh PowerShell.

Deskripsi panjang

Operator adalah elemen bahasa yang dapat Anda gunakan dalam perintah atau ekspresi. PowerShell mendukung beberapa jenis operator untuk membantu Anda memanipulasi nilai.

Operasi Aritmatika

Gunakan operator aritmatika (+, , -, */, %) untuk menghitung nilai dalam perintah atau ekspresi. Dengan operator ini, Anda dapat menambahkan, mengurangi, mengalikan, atau membagi nilai, dan menghitung sisa (modulus) dari operasi pembagian.

Operator tambahan menggabungkan elemen. Operator perkalian mengembalikan jumlah salinan yang ditentukan dari setiap elemen. Anda dapat menggunakan operator aritmatika pada jenis .NET apa pun yang mengimplementasikannya, seperti: Int, , StringDateTime, Hashtable, dan Array.

Operator bitwise (-band, -bor, , -bxor-bnot, -shl, -shr) memanipulasi pola bit dalam nilai.

Untuk informasi selengkapnya, lihat about_Arithmetic_Operators.

Operator Penugasan

Gunakan operator penugasan (=, , +=, *=-=, /=, %=) untuk menetapkan, mengubah, atau menambahkan nilai ke variabel. Anda dapat menggabungkan operator aritmatika dengan penugasan untuk menetapkan hasil operasi aritmatika ke variabel.

Untuk informasi selengkapnya, lihat about_Assignment_Operators.

Operator Perbandingan

Gunakan operator perbandingan (-eq, -ne, , -lt-gt, -le, -ge) untuk membandingkan nilai dan kondisi pengujian. Misalnya, Anda dapat membandingkan dua nilai string untuk menentukan apakah nilai tersebut sama.

Operator perbandingan juga mencakup operator yang menemukan atau mengganti pola dalam teks. Operator (-match, -notmatch, ) -replacemenggunakan ekspresi reguler, dan (-like, -notlike) menggunakan kartubebas *.

Operator perbandingan penahanan menentukan apakah nilai pengujian muncul dalam set referensi (-in, -notin, -contains, -notcontains).

Operator perbandingan jenis (-is, -isnot) menentukan apakah objek adalah jenis tertentu.

Untuk informasi selengkapnya, lihat about_Comparison_Operators.

Operator Logis

Gunakan operator logis (-and, , -or, -xor-not, !) untuk menyambungkan pernyataan kondisional ke dalam satu kondisional yang kompleks. Misalnya, Anda dapat menggunakan operator logis -and untuk membuat filter objek dengan dua kondisi yang berbeda.

Untuk informasi selengkapnya, lihat about_Logical_Operators.

Operator Pengalihan

Gunakan operator pengalihan (>, >>, , 2>2>>, dan 2>&1) untuk mengirim output perintah atau ekspresi ke file teks. Operator pengalihan berfungsi seperti Out-File cmdlet (tanpa parameter) tetapi juga memungkinkan Anda mengalihkan output kesalahan ke file tertentu. Anda juga dapat menggunakan Tee-Object cmdlet untuk mengalihkan output.

Untuk informasi selengkapnya, lihat about_Redirection

Operator Pisahkan dan Gabung

Operator -split dan -join membagi dan menggabungkan substring. Operator -split membagi string menjadi substring. Operator -join menggabungkan beberapa string ke dalam satu string.

Untuk informasi selengkapnya, lihat about_Split dan about_Join.

Operator Tipe

Gunakan operator jenis (-is, -isnot, -as) untuk menemukan atau mengubah jenis .NET Framework objek.

Untuk informasi selengkapnya, lihat about_Type_Operators.

Operator Tunggal

Gunakan operator dan -- unary ++ untuk menaikkan atau menurunkan nilai dan - untuk negasi. Misalnya, untuk menaikkan variabel $a dari 9 ke 10, Anda mengetik $a++.

Untuk informasi selengkapnya, lihat about_Arithmetic_Operators.

Operator Khusus

Operator khusus memiliki kasus penggunaan khusus yang tidak sesuai dengan grup operator lain. Misalnya, operator khusus memungkinkan Anda menjalankan perintah, mengubah jenis data nilai, atau mengambil elemen dari array.

Operator pengelompokan ( )

Seperti dalam bahasa lain, (...) berfungsi untuk mengambil alih prioritas operator dalam ekspresi. Misalnya: (1 + 2) / 3

Namun, di PowerShell, ada perilaku tambahan.

  • (...) memungkinkan Anda membiarkan output dari perintah berpartisipasi dalam ekspresi. Contohnya:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Saat digunakan sebagai segmen pertama dari alur, membungkus perintah atau ekspresi dalam tanda kurung selalu menyebabkan enumerasi hasil ekspresi. Jika tanda kurung membungkus perintah, perintah dijalankan hingga selesai dengan semua output yang dikumpulkan dalam memori sebelum hasil dikirim melalui alur.

Operator subekspresi $( )

Mengembalikan hasil dari satu atau beberapa pernyataan. Untuk satu hasil, mengembalikan skalar. Untuk beberapa hasil, mengembalikan array. Gunakan ini saat Anda ingin menggunakan ekspresi dalam ekspresi lain. Misalnya, untuk menyematkan hasil perintah dalam ekspresi string.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Operator subekspresi array @( )

Mengembalikan hasil dari satu atau beberapa pernyataan sebagai array. Hasilnya selalu merupakan array dari 0 objek atau lebih.

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

Sintaks literal tabel hash @{}

Mirip dengan subekspresi array, sintaks ini digunakan untuk mendeklarasikan tabel hash. Untuk informasi selengkapnya, lihat about_Hash_Tables.

Operator panggilan &

Menjalankan perintah, skrip, atau blok skrip. Operator panggilan, juga dikenal sebagai "operator pemanggilan", memungkinkan Anda menjalankan perintah yang disimpan dalam variabel dan diwakili oleh string atau blok skrip. Operator panggilan dijalankan dalam cakupan anak. Untuk informasi selengkapnya tentang cakupan, lihat about_Scopes.

Contoh ini menyimpan perintah dalam string dan menjalankannya menggunakan operator panggilan.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

Operator panggilan tidak mengurai string. Ini berarti Anda tidak dapat menggunakan parameter perintah dalam string saat menggunakan operator panggilan.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.

Cmdlet Invoke-Expression dapat menjalankan kode yang menyebabkan kesalahan penguraian saat menggunakan operator panggilan.

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Anda dapat menggunakan operator panggilan untuk menjalankan skrip menggunakan nama file mereka. Contoh di bawah ini menunjukkan nama file skrip yang berisi spasi. Saat Anda mencoba menjalankan skrip, PowerShell akan menampilkan konten string yang dikutip yang berisi nama file. Operator panggilan memungkinkan Anda untuk menjalankan konten string yang berisi nama file.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Untuk informasi selengkapnya tentang blok skrip, lihat about_Script_Blocks.

Operator latar belakang &

Menjalankan alur sebelum di latar belakang, dalam pekerjaan PowerShell. Operator ini bertindak mirip dengan ampersand operator kontrol UNIX (&), yang menjalankan perintah sebelum secara asinkron di subshell sebagai pekerjaan.

Operator ini secara fungsional setara Start-Jobdengan . Secara default, operator latar belakang memulai pekerjaan di direktori kerja pemanggil saat ini yang memulai tugas paralel. Contoh berikut menunjukkan penggunaan dasar operator pekerjaan latar belakang.

Get-Process -Name pwsh &

Perintah tersebut secara fungsional setara dengan penggunaan berikut dari Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Sama seperti Start-Job, & operator latar belakang mengembalikan Job objek . Objek ini dapat digunakan dengan Receive-Job dan Remove-Job, seolah-olah Anda telah menggunakan Start-Job untuk memulai pekerjaan.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

Operator & latar belakang juga merupakan terminator pernyataan, sama seperti ampersand operator kontrol UNIX (&). Ini memungkinkan Anda untuk memanggil perintah tambahan setelah & operator latar belakang. Contoh berikut menunjukkan pemanggilan perintah tambahan setelah & operator latar belakang.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Ini setara dengan skrip berikut:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Jika Anda ingin menjalankan beberapa perintah, masing-masing dalam proses latar belakang mereka sendiri tetapi semuanya pada satu baris, cukup tempatkan & antara dan setelah setiap perintah.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

Untuk informasi selengkapnya tentang pekerjaan PowerShell, lihat about_Jobs.

Operator cast [ ]

Mengonversi atau membatasi objek ke tipe yang ditentukan. Jika objek tidak dapat dikonversi, PowerShell menghasilkan kesalahan.

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

Transmisi juga dapat dilakukan saat variabel ditetapkan untuk menggunakan notasi transmisi.

Operator koma ,

Sebagai operator biner, koma membuat array atau menambahkan ke array yang sedang dibuat. Dalam mode ekspresi, sebagai operator unary, koma membuat array hanya dengan satu anggota. Tempatkan koma sebelum anggota.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Karena Write-Output mengharapkan argumen, Anda harus meletakkan ekspresi dalam tanda kurung.

Operator sumber titik .

Menjalankan skrip dalam cakupan saat ini sehingga setiap fungsi, alias, dan variabel yang dibuat skrip ditambahkan ke cakupan saat ini, menimpa yang ada. Parameter yang dideklarasikan oleh skrip menjadi variabel. Parameter yang tidak ada nilai yang diberikan menjadi variabel tanpa nilai. Namun, variabel $args otomatis dipertahankan.

. c:\scripts\sample.ps1 1 2 -Also:3

Catatan

Operator sumber titik diikuti oleh spasi. Gunakan spasi untuk membedakan titik dari simbol titik (.) yang mewakili direktori saat ini.

Dalam contoh berikut, skrip Sample.ps1 di direktori saat ini dijalankan dalam cakupan saat ini.

. .\sample.ps1

Operator format -f

Memformat string dengan menggunakan metode format objek string. Masukkan string format di sisi kiri operator dan objek yang akan diformat di sisi kanan operator.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

Anda dapat mengalihkan nilai numerik dengan penentu kustom "0". Jumlah nol setelah : menunjukkan lebar maksimum untuk melakukan pad pada string yang diformat.

"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365

Jika Anda perlu menyimpan kurung kurawal ({}) dalam string yang diformat, Anda dapat melepaskannya dengan menggandakan kurung kurawal.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Untuk informasi selengkapnya, lihat metode String.Format dan Pemformatan Komposit.

Operator indeks [ ]

Memilih objek dari koleksi terindeks, seperti array dan tabel hash. Indeks array berbasis nol, sehingga objek pertama diindeks sebagai [0]. Anda juga dapat menggunakan indeks negatif untuk mendapatkan nilai terakhir. Tabel hash diindeks oleh nilai kunci.

Mengingat daftar indeks, operator indeks mengembalikan daftar anggota yang sesuai dengan indeks tersebut.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Ketika objek bukan koleksi terindeks, menggunakan operator indeks untuk mengakses elemen pertama mengembalikan objek itu sendiri. Nilai indeks di luar elemen pertama mengembalikan $null.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Operator alur |

Mengirim ("pipa") output perintah yang mendahuluinya ke perintah yang mengikutinya. Ketika output menyertakan lebih dari satu objek ("koleksi"), operator alur mengirim objek satu per satu.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Operator && rantai alur dan ||

Jalankan alur sisi kanan secara kondisional berdasarkan keberhasilan alur sisi kiri.

# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules

Untuk informasi selengkapnya, lihat About_Pipeline_Chain_Operators.

Operator rentang ..

Mewakili bilangan bulat berurutan dalam array bilangan bulat, diberikan batas atas, dan bawah.

1..10
foreach ($a in 1..$max) {Write-Host $a}

Anda juga dapat membuat rentang dalam urutan terbalik.

10..1
5..-5 | ForEach-Object {Write-Output $_}

Dimulai di PowerShell 6, operator rentang bekerja dengan Karakter serta Bilangan Bulat.

Untuk membuat berbagai karakter, sertakan karakter batas dalam tanda kutip.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Operator akses anggota .

Mengakses properti dan metode objek. Nama anggota mungkin merupakan ekspresi.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

Memulai PowerShell 3.0, saat Anda menggunakan operator pada objek kumpulan daftar yang tidak memiliki anggota, PowerShell secara otomatis menghitung item dalam koleksi tersebut dan menggunakan operator pada masing-masing dari mereka. Untuk informasi selengkapnya, lihat Access_Enumeration about_Member.

Operator anggota statis ::

Memanggil properti statis dan metode kelas .NET Framework. Untuk menemukan properti statis dan metode objek, gunakan parameter Statis cmdlet Get-Member . Nama anggota mungkin merupakan ekspresi.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Operator ternary ? <if-true> : <if-false>

Anda dapat menggunakan operator ternary sebagai pengganti if-else pernyataan dalam kasus bersyarat sederhana.

Untuk informasi selengkapnya, lihat about_If.

Operator coalescing null ??

Operator null-coalescing ?? mengembalikan nilai operand sebelah kirinya jika bukan null. Jika tidak, itu mengevaluasi operand tangan kanan dan mengembalikan hasilnya. Operator ?? tidak mengevaluasi operand kanannya apabila operand sebelah kiri mengevaluasi ke non-null.

$x = $null
$x ?? 100
100

Dalam contoh berikut, operand sebelah kanan tidak akan dievaluasi.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operator penugasan coalescing null ??=

Operator ??= penugasan null-coalescing menetapkan nilai operand tangan kanannya ke operand sebelah kirinya hanya jika operand sebelah kiri mengevaluasi ke null. Operator ??= tidak mengevaluasi operand kanannya apabila operand sebelah kiri mengevaluasi ke non-null.

$x = $null
$x ??= 100
$x
100

Dalam contoh berikut, operand sebelah kanan tidak akan dievaluasi.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operator ?. null-conditional dan ?[]

Catatan

Fitur ini dipindahkan dari eksperimental ke mainstream di PowerShell 7.1.

Operator null-conditional menerapkan akses anggota, ?., atau akses elemen, ?[], operasi ke operand-nya hanya jika operand tersebut mengevaluasi ke non-null; jika tidak, itu mengembalikan null.

Karena PowerShell memungkinkan ? untuk menjadi bagian dari nama variabel, spesifikasi formal dari nama variabel diperlukan untuk menggunakan operator ini. Jadi diperlukan untuk menggunakan {} sekitar nama variabel seperti ${a} atau ketika ? merupakan bagian dari nama ${a?}variabel .

Dalam contoh berikut, nilai PropName dikembalikan.

$a = @{ PropName = 100 }
${a}?.PropName
100

Contoh berikut akan mengembalikan null, tanpa mencoba mengakses nama anggota PropName.

$a = $null
${a}?.PropName

Demikian pula, nilai elemen akan dikembalikan.

$a = 1..10
${a}?[0]
1

Dan ketika operand null, elemen tidak diakses dan null dikembalikan.

$a = $null
${a}?[0]

Catatan

Karena PowerShell memungkinkan ? untuk menjadi bagian dari nama variabel, spesifikasi formal dari nama variabel diperlukan untuk menggunakan operator ini. Jadi diperlukan untuk menggunakan {} sekitar nama variabel seperti ${a} atau ketika ? merupakan bagian dari nama ${a?}variabel .

Sintaks ${<name>} nama variabel tidak boleh dikacaukan dengan $() operator subekspresi. Untuk informasi selengkapnya, lihat Bagian nama variabel about_Variables.

Lihat juga