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, , StringDateTime, Hashtable, dan Array.

Operator bitwise (-band, , -bor, -bxor-bnot, -shl, ) -shrmemanipulasi 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, ) -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 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.

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-Jobberikut:

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 cX 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]

Lihat juga