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) operasi pembagian.
Operator penambahan menggabungkan elemen. Operator perkalian mengembalikan jumlah salinan yang ditentukan dari setiap elemen. Anda dapat menggunakan operator aritmetika pada jenis .NET apa pun yang mengimplementasikannya, seperti: Int
, , String
DateTime
, 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 menyertakan operator yang menemukan atau mengganti pola dalam teks. Operator (-match
, -notmatch
, ) -replace
menggunakan 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 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 operator tersebut juga memungkinkan Anda mengalihkan output kesalahan ke file yang ditentukan. Anda juga dapat menggunakan Tee-Object
cmdlet untuk mengalihkan output.
Untuk informasi selengkapnya, lihat about_Redirection
Operator Pisah 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 objek.
Untuk informasi selengkapnya, lihat about_Type_Operators.
Operator Tunggal
Gunakan unary ++
dan --
operator 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.
Mengelompokkan ekspresi hasil
(...)
memungkinkan Anda untuk membiarkan output dari perintah berpartisipasi dalam ekspresi.
Contohnya:
PS> (Get-Item *.txt).Count -gt 10
True
Piping ekspresi yang dikelompokkan
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 ke penyelesaian dengan semua output yang dikumpulkan dalam memori sebelum hasil dikirim melalui alur.
Mengelompokkan ekspresi sebelum pipa juga memastikan bahwa pemrosesan objek demi objek berikutnya tidak dapat mengganggu enumerasi yang digunakan perintah untuk menghasilkan outputnya.
Mengelompokkan pernyataan penetapan
Pernyataan penetapan yang tidak dikeroyong tidak menghasilkan nilai. Saat mengelompokkan pernyataan penetapan, nilai variabel yang ditetapkan diteruskan dan dapat digunakan dalam ekspresi yang lebih besar. Contohnya:
PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True
Membungkus pernyataan dalam tanda kurung mengubahnya menjadi ekspresi yang menghasilkan nilai $var
.
Perilaku ini berlaku untuk semua operator penugasan, termasuk operator gabungan seperti +=
, dan operator kenaikan (++
) dan penurunan (--
).
Namun, urutan operasi untuk kenaikan dan penurunan tergantung pada posisi mereka.
PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1
Dalam kasus awalan, nilai bertahap $i
sebelum output. Dalam kasus postfix, nilai $i
ditambahkan setelah output.
Anda juga dapat menggunakan teknik ini Dalam konteks pernyataan bersyarkat, seperti if
pernyataan .
if ($textFiles = Get-ChildItem *.txt) {
$textFiles.Count
}
Dalam contoh ini, jika tidak ada file yang cocok, Get-ChildItem
perintah tidak mengembalikan apa pun dan tidak menetapkan apa pun ke $textFiles
, yang dipertimbangkan $false
dalam konteks boolean. Jika satu atau beberapa objek FileInfo ditetapkan ke $textFiles
, kondisional dievaluasi ke $true
. Anda dapat bekerja dengan nilai $textFiles
dalam isi if
pernyataan.
Catatan
Meskipun teknik ini nyaman dan ringkas, teknik ini dapat menyebabkan kebingungan antara operator penugasan (=
) dan operator perbandingan kesetaraan (-eq
).
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
Sintaksis 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. Anda dapat menggunakan ini untuk membangun string yang berisi perintah, parameter, dan argumen yang Anda butuhkan, lalu memanggil string seolah-olah itu adalah perintah. String yang Anda buat harus mengikuti aturan penguraian yang sama dengan perintah yang Anda ketik di baris perintah. Untuk informasi selengkapnya, lihat about_Parsing.
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 Anda 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 a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
PS> Invoke-Expression "1+1"
2
Anda dapat menjalankan skrip menggunakan nama filenya. File skrip harus memiliki .ps1
ekstensi file agar dapat dieksekusi. File yang memiliki spasi di jalurnya harus diapit dalam tanda kutip. Jika Anda mencoba menjalankan jalur yang dikutip, PowerShell menampilkan konten string yang dikutip alih-alih menjalankan skrip. Operator panggilan memungkinkan Anda 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 dengan Start-Job
. 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 Start-Job
berikut:
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 digunakan 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 belakangnya 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 jenis yang ditentukan. Jika objek tidak dapat dikonversi, PowerShell menghasilkan kesalahan.
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'
Cast juga dapat dilakukan saat variabel ditetapkan untuk menggunakan notasi cast.
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 fungsi, alias, dan variabel apa pun 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 melakukan zero-pad nilai numerik dengan penentu kustom "0". Jumlah nol setelah :
menunjukkan lebar maksimum untuk mengalihkan 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...
Saat 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 ..
Operator rentang dapat digunakan untuk mewakili array bilangan bulat atau karakter berurutan. Nilai yang digabungkan oleh operator rentang menentukan nilai awal dan akhir rentang.
Catatan
Dukungan untuk rentang karakter ditambahkan di PowerShell 6.
Rentang angka
1..10
$max = 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 $_}
Nilai awal dan akhir rentang dapat berupa sepasang ekspresi apa pun yang dievaluasi ke bilangan bulat atau karakter. Titik akhir rentang harus dapat dikonversi ke bilangan bulat 32-bit yang ditandatangani ([int32]
). Nilai yang lebih besar menyebabkan kesalahan. Selain itu, jika rentang diambil dalam array, ukuran array yang dihasilkan terbatas pada [int]::MaxValue - 56
. Ini adalah ukuran maksimum array di .NET.
Misalnya, Anda dapat menggunakan anggota enumerasi untuk nilai awal dan akhir Anda.
PS> enum Food {
Apple
Banana = 3
Kiwi = 10
}
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10
Penting
Rentang yang dihasilkan tidak terbatas pada nilai enumerasi. Sebaliknya mewakili rentang nilai antara dua nilai yang disediakan. Anda tidak dapat menggunakan operator rentang untuk mewakili anggota enumerasi dengan andal.
Rentang karakter
Untuk membuat rentang karakter, sertakan karakter dalam tanda kutip.
PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A
Jika Anda menetapkan rentang karakter ke string, rentang karakter diperlakukan sama dengan menetapkan array karakter ke string.
PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e
Karakter dalam array digabungkan ke dalam string. Karakter dipisahkan oleh nilai $OFS
variabel preferensi. Untuk informasi selengkapnya, lihat about_Preference_Variables.
Urutan karakter dalam array ditentukan oleh nilai ASCII karakter. Misalnya, nilai ASCII dan c
X
masing-masing adalah 99 dan 88. Rentang itu akan disajikan dalam urutan terbalik.
PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X
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-masingnya. Untuk informasi selengkapnya, lihat about_Member-Access_Enumeration.
Operator anggota statis ::
Memanggil properti statis dan metode kelas .NET. Untuk menemukan properti statis dan metode objek, gunakan parameter Get-Member
Statis cmdlet. Nama anggota mungkin merupakan ekspresi.
[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }
Operator ternary ? <if-true> : <if-false>
Anda dapat menggunakan operator terner sebagai pengganti if-else
pernyataan dalam kasus bersyarat sederhana.
Untuk informasi selengkapnya, lihat about_If.
Operator null-coalescing ??
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 null-coalescing ??=
Operator ??=
penetapan 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()
$todaysDate
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. Anda harus menggunakan kurung kurawal ({}
) di sekitar nama variabel seperti ${a}
atau kapan ?
adalah bagian dari nama ${a?}
variabel .
Catatan
Sintaks ${<name>}
nama variabel tidak boleh dikacaukan dengan $()
operator subekspresi. Untuk informasi selengkapnya, lihat Bagian nama variabel about_Variables.
Dalam contoh berikut, nilai PropName dikembalikan.
$a = @{ PropName = 100 }
${a}?.PropName
100
Contoh berikut mengembalikan null tanpa mencoba mengakses nama anggota PropName.
$a = $null
${a}?.PropName
Dalam contoh ini, nilai elemen terindeks dikembalikan.
$a = 1..10
${a}?[0]
1
Contoh berikut mengembalikan null tanpa mencoba mengakses elemen terindeks.
$a = $null
${a}?[0]