Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Semua yang ingin Anda ketahui tentang
Seperti banyak bahasa lain, PowerShell memiliki pernyataan untuk mengeksekusi kode secara kondisional dalam skrip Anda. Salah satu pernyataan tersebut adalah pernyataan If . Hari ini kita akan mendalami salah satu perintah paling mendasar di PowerShell.
Catatan
Versi asli artikel ini muncul di blog yang ditulis oleh @KevinMarquette. Tim PowerShell berterima kasih kepada Kevin karena telah membagikan konten ini kepada kami. Silakan lihat blognya di PowerShellExplained.com.
Eksekusi bersyarah
Skrip Anda sering kali perlu membuat keputusan dan melakukan logika yang berbeda berdasarkan keputusan tersebut.
Inilah yang kumaksudkan dengan eksekusi kondisional. Anda memiliki satu pernyataan atau nilai untuk dievaluasi, lalu menjalankan bagian kode yang berbeda berdasarkan evaluasi tersebut. Inilah yang dilakukan oleh pernyataan tersebut if
.
Pernyataan if
Berikut adalah contoh if
dasar pernyataan:
$condition = $true
if ( $condition )
{
Write-Output "The condition was true"
}
Hal pertama yang if
dilakukan pernyataan adalah mengevaluasi ekspresi dalam tanda kurung. Jika dievaluasi ke $true
, maka ia mengeksekusi scriptblock
dalam kurung kurawal. Jika nilainya adalah $false
, maka nilai tersebut akan melewati blokir skrip tersebut.
Dalam contoh sebelumnya, if
pernyataan hanya mengevaluasi $condition
variabel. Itu dan $true
akan menjalankan perintah di Write-Output
dalam blok skrip.
Dalam beberapa bahasa, Anda dapat menempatkan satu baris kode setelah if
pernyataan dan dieksekusi. Bukan itu masalahnya di PowerShell. Anda harus menyediakan kurung kurawal penuh scriptblock
agar berfungsi dengan benar.
Operator perbandingan
Penggunaan pernyataan yang if
paling umum adalah membandingkan dua item satu sama lain. PowerShell memiliki operator khusus untuk skenario perbandingan yang berbeda. Saat Anda menggunakan operator perbandingan, nilai di sisi kiri dibandingkan dengan nilai di sisi kanan.
-eq untuk kesetaraan
-eq
melakukan pemeriksaan kesetaraan antara dua nilai untuk memastikan keduanya sama satu sama lain.
$value = Get-MysteryValue
if ( 5 -eq $value )
{
# do something
}
Dalam contoh ini, saya mengambil nilai 5
yang diketahui dan membandingkannya dengan saya $value
untuk melihat apakah mereka cocok.
Salah satu kemungkinan kasus penggunaan adalah memeriksa status nilai sebelum Anda mengambil tindakan di atasnya. Anda bisa mendapatkan layanan dan memeriksa apakah status berjalan sebelum Anda memanggilnya Restart-Service
.
Umum dalam bahasa lain seperti C# untuk digunakan ==
untuk kesetaraan (misalnya: 5 == $value
) tetapi itu tidak berfungsi dengan PowerShell. Kesalahan umum lain yang dilakukan orang adalah menggunakan tanda sama dengan (misalnya: 5 = $value
) yang dicadangkan untuk menetapkan nilai ke variabel. Dengan menempatkan nilai Anda yang diketahui di sebelah kiri, itu membuat kesalahan itu lebih canggung untuk dibuat.
Operator ini (dan lainnya) memiliki beberapa variasi.
-eq
kesetaraan tidak peka huruf besar/kecil-ieq
kesetaraan tidak peka huruf besar/kecil-ceq
kesetaraan peka huruf besar/kecil
-ne tidak sama
Banyak operator memiliki operator terkait yang memeriksa hasil yang berlawanan. -ne
memverifikasi bahwa nilai tidak sama satu sama lain.
if ( 5 -ne $value )
{
# do something
}
Gunakan ini untuk memastikan bahwa tindakan hanya dijalankan jika nilainya bukan 5
. Kasus penggunaan yang baik di mana akan memeriksa apakah layanan dalam status berjalan sebelum Anda mencoba memulainya.
Variasi:
-ne
tidak peka huruf besar/kecil tidak sama-ine
tidak peka huruf besar/kecil tidak sama-cne
peka huruf besar/kecil tidak sama
Ini adalah variasi terbalik dari -eq
. Saya akan mengelompokkan jenis ini bersama-sama ketika saya mencantumkan variasi untuk operator lain.
-gt -ge -lt -le untuk lebih besar dari atau kurang dari
Operator ini digunakan saat memeriksa untuk melihat apakah nilai lebih besar atau lebih kecil dari nilai lain.
Singkatan -gt -ge -lt -le
dari GreaterThan, GreaterThanOrEqual, LessThan, dan LessThanOrEqual.
if ( $value -gt 5 )
{
# do something
}
Variasi:
-gt
lebih besar dari-igt
lebih besar dari, tidak peka huruf besar/kecil-cgt
lebih besar dari, peka huruf besar/kecil-ge
lebih besar dari atau sama dengan-ige
lebih besar dari atau sama dengan, tidak peka huruf besar/kecil-cge
lebih besar dari atau sama dengan, peka huruf besar/kecil-lt
Kurang-ilt
kurang dari, tidak peka huruf besar/kecil-clt
kurang dari, peka huruf besar/kecil-le
kurang dari atau sama dengan-ile
kurang dari atau sama dengan, tidak peka huruf besar/kecil-cle
kurang dari atau sama dengan, peka huruf besar/kecil
Saya tidak tahu mengapa Anda akan menggunakan opsi peka huruf besar/kecil dan tidak sensitif untuk operator ini.
-seperti kecocokan kartubebas
PowerShell memiliki sintaks pencocokan pola berbasis kartubebas sendiri dan Anda dapat menggunakannya dengan -like
operator. Pola kartubebas ini cukup mendasar.
?
mencocokkan karakter tunggal apa pun*
cocok dengan sejumlah karakter
$value = 'S-ATX-SQL01'
if ( $value -like 'S-*-SQL??')
{
# do something
}
Penting untuk menunjukkan bahwa pola cocok dengan seluruh string. Jika Anda perlu mencocokkan sesuatu di tengah string, Anda perlu menempatkan *
di kedua ujung string.
$value = 'S-ATX-SQL02'
if ( $value -like '*SQL*')
{
# do something
}
Variasi:
-like
kartubebas yang tidak peka huruf besar/kecil-ilike
kartubebas yang tidak peka huruf besar/kecil-clike
kartubebas peka huruf besar/kecil-notlike
kartubebas tidak peka huruf besar/kecil tidak cocok-inotlike
kartubebas tidak peka huruf besar/kecil tidak cocok-cnotlike
kartubebas peka huruf besar/kecil tidak cocok
-cocokkan ekspresi reguler
Operator -match
memungkinkan Anda memeriksa string untuk kecocokan berbasis ekspresi reguler. Gunakan ini ketika pola kartubebas tidak cukup fleksibel untuk Anda.
$value = 'S-ATX-SQL01'
if ( $value -match 'S-\w\w\w-SQL\d\d')
{
# do something
}
Pola regex cocok di mana saja dalam string secara default. Jadi Anda dapat menentukan substring yang ingin Anda cocokkan seperti ini:
$value = 'S-ATX-SQL01'
if ( $value -match 'SQL')
{
# do something
}
Regex adalah bahasa yang kompleks dari bahasanya sendiri dan layak dilihat. Saya berbicara lebih banyak tentang -match
dan banyak cara untuk menggunakan regex di artikel lain.
Variasi:
-match
regex tidak peka huruf besar/kecil-imatch
regex tidak peka huruf besar/kecil-cmatch
regex peka huruf besar/kecil-notmatch
regex tidak peka huruf besar/kecil tidak cocok-inotmatch
regex tidak peka huruf besar/kecil tidak cocok-cnotmatch
regex peka huruf besar/kecil tidak cocok
-is dari jenis
Anda dapat memeriksa jenis nilai dengan -is
operator.
if ( $value -is [string] )
{
# do something
}
Anda dapat menggunakan ini jika Anda bekerja dengan kelas atau menerima berbagai objek melalui alur. Anda dapat memiliki layanan atau nama layanan sebagai input Anda. Kemudian periksa untuk melihat apakah Anda memiliki layanan dan mengambil layanan jika Anda hanya memiliki nama.
if ( $Service -isnot [System.ServiceProcess.ServiceController] )
{
$Service = Get-Service -Name $Service
}
Variasi:
-is
jenis-isnot
bukan tipe
Operator koleksi
Saat Anda menggunakan operator sebelumnya dengan satu nilai, hasilnya adalah $true
atau $false
. Ini ditangani sedikit berbeda saat bekerja dengan koleksi. Setiap item dalam koleksi dievaluasi dan operator mengembalikan setiap nilai yang dievaluasi ke $true
.
PS> 1,2,3,4 -eq 3
3
Ini masih berfungsi dengan benar dalam pernyataan if
. Jadi nilai dikembalikan oleh operator Anda, maka seluruh pernyataannya adalah $true
.
$array = 1..6
if ( $array -gt 3 )
{
# do something
}
Ada satu jebakan kecil bersembunyi dalam rincian di sini bahwa saya perlu menunjukkan. Saat menggunakan operator dengan -ne
cara ini, mudah untuk secara keliru melihat logika mundur. Menggunakan -ne
dengan koleksi mengembalikan $true
jika ada item dalam koleksi yang tidak cocok dengan nilai Anda.
PS> 1,2,3 -ne 4
1
2
3
Ini mungkin terlihat seperti trik cerdas, tetapi kami memiliki operator -contains
dan -in
yang menangani ini lebih efisien. Dan -notcontains
melakukan apa yang Anda harapkan.
-contains
Operator -contains
memeriksa koleksi untuk nilai Anda. Segera setelah menemukan kecocokan, ia mengembalikan $true
.
$array = 1..6
if ( $array -contains 3 )
{
# do something
}
Ini adalah cara yang disukai untuk melihat apakah koleksi berisi nilai Anda. Menggunakan Where-Object
(atau -eq
) memandu seluruh daftar setiap kali dan secara signifikan lebih lambat.
Variasi:
-contains
kecocokan tidak peka huruf besar/kecil-icontains
kecocokan tidak peka huruf besar/kecil-ccontains
kecocokan peka huruf besar/kecil-notcontains
tidak peka huruf besar/kecil tidak cocok-inotcontains
tidak peka huruf besar/kecil tidak cocok-cnotcontains
peka huruf besar/kecil tidak cocok
-in
Operator -in
sama seperti -contains
operator kecuali koleksi berada di sisi kanan.
$array = 1..6
if ( 3 -in $array )
{
# do something
}
Variasi:
-in
kecocokan tidak peka huruf besar/kecil-iin
kecocokan tidak peka huruf besar/kecil-cin
kecocokan peka huruf besar/kecil-notin
tidak peka huruf besar/kecil tidak cocok-inotin
tidak peka huruf besar/kecil tidak cocok-cnotin
peka huruf besar/kecil tidak cocok
Operator logis
Operator logis digunakan untuk menginversi atau menggabungkan ekspresi lain.
-Tidak
Operator -not
membalikkan ekspresi dari $false
ke $true
atau dari $true
ke $false
. Berikut adalah contoh di mana kita ingin melakukan tindakan ketika Test-Path
adalah $false
.
if ( -not ( Test-Path -Path $path ) )
Sebagian besar operator yang kami bicarakan memang memiliki variasi di mana Anda tidak perlu menggunakan -not
operator. Tetapi masih ada kalanya berguna.
! operator
Anda dapat menggunakan !
sebagai alias untuk -not
.
if ( -not $value ){}
if ( !$value ){}
Anda mungkin melihat !
lebih banyak digunakan oleh orang-orang yang berasal dari bahasa lain seperti C#. Saya lebih suka mengetiknya karena saya merasa sulit untuk melihat ketika dengan cepat melihat skrip saya.
-and
Anda dapat menggabungkan ekspresi dengan -and
operator. Ketika Anda melakukan itu, kedua belah pihak harus untuk $true
seluruh ekspresi menjadi $true
.
if ( ($age -gt 13) -and ($age -lt 55) )
Dalam contoh itu, $age
harus 13 atau lebih lama untuk sisi kiri dan kurang dari 55 untuk sisi kanan. Saya menambahkan tanda kurung tambahan untuk membuatnya lebih jelas dalam contoh itu tetapi bersifat opsional selama ekspresinya sederhana. Berikut adalah contoh yang sama tanpa mereka.
if ( $age -gt 13 -and $age -lt 55 )
Evaluasi terjadi dari kiri ke kanan. Jika item pertama dievaluasi ke $false
, item keluar lebih awal dan tidak melakukan perbandingan yang tepat. Ini berguna ketika Anda perlu memastikan ada nilai sebelum Anda menggunakannya. Misalnya, Test-Path
melemparkan kesalahan jika Anda memberinya $null
jalur.
if ( $null -ne $path -and (Test-Path -Path $path) )
-or
memungkinkan -or
Anda menentukan dua ekspresi dan mengembalikan $true
jika salah satunya adalah $true
.
if ( $age -le 13 -or $age -ge 55 )
Sama seperti operator -and
, evaluasi terjadi dari kiri ke kanan. Kecuali bahwa jika bagian pertama adalah $true
, maka seluruh pernyataan adalah $true
dan tidak memproses sisa ekspresi.
Catat juga cara kerja sintaks untuk operator ini. Anda memerlukan dua ekspresi terpisah. Saya telah melihat pengguna mencoba melakukan sesuatu seperti ini $value -eq 5 -or 6
tanpa menyadari kesalahan mereka.
-xor eksklusif atau
Yang satu ini sedikit tidak biasa. -xor
hanya memungkinkan satu ekspresi untuk mengevaluasi ke $true
. Jadi jika kedua item adalah $false
atau kedua item adalah $true
, maka seluruh ekspresinya adalah $false
. Cara lain untuk melihat ini adalah ekspresi hanya $true
ketika hasil ekspresi berbeda.
Sangat jarang bahwa siapa pun akan pernah menggunakan operator logis ini dan saya tidak bisa memikirkan contoh yang baik mengapa saya pernah menggunakannya.
Operator bitwise
Operator bitwise melakukan perhitungan pada bit dalam nilai dan menghasilkan nilai baru sebagai hasilnya. Mengajar operator bitwise berada di luar cakupan artikel ini, tetapi berikut adalah daftarnya.
-band
biner DAN-bor
biner ATAU-bxor
biner eksklusif OR-bnot
biner NOT-shl
geser ke kiri-shr
geser ke kanan
Ekspresi PowerShell
Kita dapat menggunakan PowerShell normal di dalam pernyataan kondisi.
if ( Test-Path -Path $Path )
Test-Path
$true
mengembalikan atau $false
ketika dijalankan. Ini juga berlaku untuk perintah yang mengembalikan nilai lain.
if ( Get-Process Notepad* )
Ini mengevaluasi ke $true
jika ada proses yang dikembalikan dan $false
jika tidak ada. Sangat valid untuk menggunakan ekspresi alur atau pernyataan PowerShell lainnya seperti ini:
if ( Get-Process | Where Name -eq Notepad )
Ekspresi ini dapat dikombinasikan satu sama lain dengan -and
operator dan -or
, tetapi Anda mungkin harus menggunakan tanda kurung untuk memecahnya menjadi subekspresi.
if ( (Get-Process) -and (Get-Service) )
Memeriksa $null
Tidak memiliki hasil atau nilai yang $null
dievaluasi $false
dalam if
pernyataan. Saat memeriksa khusus untuk $null
, ini adalah praktik terbaik untuk menempatkan $null
di sisi kiri.
if ( $null -eq $value )
Ada beberapa nuansa saat berhadapan dengan $null
nilai di PowerShell. Jika Anda tertarik untuk menyelam lebih dalam, saya memiliki artikel tentang semua yang ingin Anda ketahui tentang $null.
Penetapan variabel dalam kondisi
Aku hampir lupa menambahkan ini sampai Prasoon Karunan V mengingatkanku akan hal itu.
if ($process=Get-Process notepad -ErrorAction ignore) {$process} else {$false}
Biasanya saat Anda menetapkan nilai ke variabel, nilai tidak diteruskan ke alur atau konsol. Saat Anda melakukan penetapan variabel dalam sub ekspresi, itu akan diteruskan ke alur.
PS> $first = 1
PS> ($second = 2)
2
Lihat bagaimana $first
penugasan tidak memiliki output dan $second
penugasan? Ketika penugasan dilakukan dalam pernyataan if
, tugas dijalankan sama seperti penugasan di $second
atas. Berikut adalah contoh yang bersih tentang bagaimana Anda dapat menggunakannya:
if ( $process = Get-Process Notepad* )
{
$process | Stop-Process
}
Jika $process
diberi nilai, maka pernyataannya adalah $true
dan $process
dihentikan.
Pastikan Anda tidak membingungkan ini karena -eq
ini bukan pemeriksaan kesetaraan. Ini adalah fitur yang lebih tidak jelas yang tidak disadari kebanyakan orang bekerja dengan cara ini.
Penetapan variabel dari blok skrip
Anda juga dapat menggunakan if
blokir skrip pernyataan untuk menetapkan nilai ke variabel.
$discount = if ( $age -ge 55 )
{
Get-SeniorDiscount
}
elseif ( $age -le 13 )
{
Get-ChildDiscount
}
else
{
0.00
}
Setiap blok skrip menulis hasil perintah, atau nilai, sebagai output. Kita dapat menetapkan hasil if
pernyataan ke $discount
variabel . Contoh itu bisa saja dengan mudah menetapkan nilai-nilai tersebut ke $discount
variabel langsung di setiap blok skrip. Saya tidak bisa mengatakan bahwa saya sering menggunakan ini dengan if
pernyataan, tetapi saya memiliki contoh di mana saya menggunakan ini baru-baru ini.
Jalur eksekusi alternatif
Pernyataan ini if
memungkinkan Anda menentukan tindakan untuk tidak hanya ketika pernyataan adalah $true
, tetapi juga ketika itu $false
adalah . Di sinilah pernyataan datang else
ke dalam bermain.
else
Pernyataan else
selalu merupakan bagian terakhir dari if
pernyataan saat digunakan.
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
else
{
Write-Warning "$path doesn't exist or isn't a file."
}
Dalam contoh ini, kami memeriksa $path
untuk memastikan itu adalah file. Jika kita menemukan file, kita memindahkannya. Jika tidak, kami menulis peringatan. Jenis logika percabangan ini sangat umum.
Berlapis jika
Pernyataan if
dan else
mengambil blok skrip, sehingga kita dapat menempatkan perintah PowerShell di dalamnya, termasuk pernyataan lain if
. Ini memungkinkan Anda untuk menggunakan logika yang jauh lebih rumit.
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
else
{
if ( Test-Path -Path $Path )
{
Write-Warning "A file was required but a directory was found instead."
}
else
{
Write-Warning "$path could not be found."
}
}
Dalam contoh ini, kita menguji jalur bahagia terlebih dahulu dan kemudian mengambil tindakan di atasnya. Jika gagal, kami melakukan pemeriksaan lain dan untuk memberikan informasi yang lebih rinci kepada pengguna.
elseif
Kami tidak terbatas hanya pada satu pemeriksaan kondisional. Kita dapat menautkan if
dan else
pernyataan bersama-sama alih menyarangkannya dengan menggunakan pernyataan .elseif
if ( Test-Path -Path $Path -PathType Leaf )
{
Move-Item -Path $Path -Destination $archivePath
}
elseif ( Test-Path -Path $Path )
{
Write-Warning "A file was required but a directory was found instead."
}
else
{
Write-Warning "$path could not be found."
}
Eksekusi terjadi dari atas ke bawah. Pernyataan teratas if
dievaluasi terlebih dahulu. Jika itu adalah $false
, maka ia berpindah ke bawah ke daftar berikutnya elseif
atau else
dalam daftar. Yang terakhir else
adalah tindakan default yang harus diambil jika tidak ada yang mengembalikan $true
.
beralih
Pada titik ini, saya perlu menyebutkan switch
pernyataan. Ini menyediakan sintaks alternatif untuk melakukan beberapa perbandingan dengan nilai. switch
Dengan , Anda menentukan ekspresi dan hasil tersebut dibandingkan dengan beberapa nilai yang berbeda. Jika salah satu nilai tersebut cocok, blok kode yang cocok dijalankan. Lihat contoh ini:
$itemType = 'Role'
switch ( $itemType )
{
'Component'
{
'is a component'
}
'Role'
{
'is a role'
}
'Location'
{
'is a location'
}
}
Ada tiga kemungkinan nilai yang dapat cocok dengan $itemType
. Dalam hal ini, cocok dengan Role
. Saya menggunakan contoh sederhana hanya untuk memberi Anda beberapa paparan ke switch
operator. Saya berbicara lebih banyak tentang semua yang ingin Anda ketahui tentang pernyataan switch di artikel lain.
Array sebaris
Saya memiliki fungsi yang disebut Invoke-SnowSql yang meluncurkan executable dengan beberapa argumen baris perintah. Berikut adalah klip dari fungsi tersebut di mana saya membangun array argumen.
$snowSqlParam = @(
'--accountname', $Endpoint
'--username', $Credential.UserName
'--option', 'exit_on_error=true'
'--option', 'output_format=csv'
'--option', 'friendly=false'
'--option', 'timing=false'
if ($Debug)
{
'--option', 'log_level=DEBUG'
}
if ($Path)
{
'--filename', $Path
}
else
{
'--query', $singleLineQuery
}
)
Variabel $Debug
dan $Path
adalah parameter pada fungsi yang disediakan oleh pengguna akhir.
Saya mengevaluasinya sebaris di dalam inisialisasi array saya. Jika $Debug
benar, maka nilai-nilai tersebut berada di tempat yang $snowSqlParam
benar. Hal yang sama berlaku untuk $Path
variabel.
Menyederhanakan operasi yang kompleks
Tidak dapat dihindari bahwa Anda mengalami situasi yang memiliki terlalu banyak perbandingan untuk diperiksa dan pernyataan Anda If
menggulir jauh dari sisi kanan layar.
$user = Get-ADUser -Identity $UserName
if ( $null -ne $user -and $user.Department -eq 'Finance' -and $user.Title -match 'Senior' -and $user.HomeDrive -notlike '\\server\*' )
{
# Do Something
}
Mereka bisa sulit dibaca dan itu membuat Anda lebih rentan untuk membuat kesalahan. Ada beberapa hal yang bisa kita lakukan tentang itu.
Kelanjutan baris
Ada beberapa operator di PowerShell yang memungkinkan Anda membungkus perintah Anda ke baris berikutnya. Operator -and
logis dan -or
merupakan operator yang baik untuk digunakan jika Anda ingin memecah ekspresi Anda menjadi beberapa baris.
if ($null -ne $user -and
$user.Department -eq 'Finance' -and
$user.Title -match 'Senior' -and
$user.HomeDrive -notlike '\\server\*'
)
{
# Do Something
}
Masih banyak yang terjadi di sana, tetapi menempatkan setiap bagian pada barisnya sendiri membuat perbedaan besar. Saya umumnya menggunakan ini ketika saya mendapatkan lebih dari dua perbandingan atau jika saya harus menggulir ke kanan untuk membaca salah satu logika.
Hasil pra-perhitungan
Kita dapat mengambil pernyataan itu if
dari pernyataan dan hanya memeriksa hasilnya.
$needsSecureHomeDrive = $null -ne $user -and
$user.Department -eq 'Finance' -and
$user.Title -match 'Senior' -and
$user.HomeDrive -notlike '\\server\*'
if ( $needsSecureHomeDrive )
{
# Do Something
}
Ini hanya terasa jauh lebih bersih daripada contoh sebelumnya. Anda juga diberi kesempatan untuk menggunakan nama variabel yang menjelaskan apa yang benar-benar Anda periksa. Ini juga dan contoh kode dokumentasi mandiri yang menyimpan komentar yang tidak perlu.
Beberapa pernyataan jika
Kita dapat memecah ini menjadi beberapa pernyataan dan memeriksanya satu per satu. Dalam hal ini, kami menggunakan bendera atau variabel pelacakan untuk menggabungkan hasilnya.
$skipUser = $false
if( $null -eq $user )
{
$skipUser = $true
}
if( $user.Department -ne 'Finance' )
{
Write-Verbose "isn't in Finance department"
$skipUser = $true
}
if( $user.Title -match 'Senior' )
{
Write-Verbose "Doesn't have Senior title"
$skipUser = $true
}
if( $user.HomeDrive -like '\\server\*' )
{
Write-Verbose "Home drive already configured"
$skipUser = $true
}
if ( -not $skipUser )
{
# do something
}
Saya memang harus membalikkan logika untuk membuat logika bendera berfungsi dengan benar. Setiap evaluasi adalah pernyataan individu if
. Keuntungan dari ini adalah bahwa ketika Anda men-debug, Anda dapat mengetahui dengan tepat apa yang dilakukan logika. Saya dapat menambahkan verbositas yang jauh lebih baik pada saat yang sama.
Kelemahan yang jelas adalah bahwa itu jauh lebih banyak kode untuk ditulis. Kode ini lebih kompleks untuk dilihat karena membutuhkan satu baris logika dan meledakkannya menjadi 25 baris atau lebih.
Menggunakan fungsi
Kita juga dapat memindahkan semua logika validasi tersebut ke dalam fungsi. Lihatlah sekilas bagaimana ini terlihat bersih.
if ( Test-SecureDriveConfiguration -ADUser $user )
{
# do something
}
Anda masih harus membuat fungsi untuk melakukan validasi, tetapi membuat kode ini jauh lebih mudah untuk dikerjakan. Ini membuat kode ini lebih mudah diuji. Dalam pengujian, Anda dapat meniru panggilan dan Test-ADDriveConfiguration
Anda hanya memerlukan dua tes untuk fungsi ini. Satu di mana ia kembali $true
dan satu di mana ia mengembalikan $false
. Menguji fungsi lain lebih sederhana karena sangat kecil.
Isi fungsi itu masih bisa menjadi bahwa satu liner yang kita mulai dengan atau logika meledak yang kita gunakan di bagian terakhir. Ini berfungsi dengan baik untuk kedua skenario dan memungkinkan Anda untuk dengan mudah mengubah implementasi tersebut nanti.
Penanganan kesalahan
Salah satu penggunaan penting dari if
pernyataan ini adalah memeriksa kondisi kesalahan sebelum Anda mengalami kesalahan. Contoh yang baik adalah memeriksa apakah folder sudah ada sebelum Anda mencoba membuatnya.
if ( -not (Test-Path -Path $folder) )
{
New-Item -Type Directory -Path $folder
}
Saya ingin mengatakan bahwa jika Anda mengharapkan pengecualian terjadi, maka itu tidak benar-benar pengecualian. Jadi, periksa nilai Anda dan validasi kondisi Anda di mana Anda bisa.
Jika Anda ingin menyelam sedikit lebih ke penanganan pengecualian yang sebenarnya, saya memiliki artikel tentang semua yang ingin Anda ketahui tentang pengecualian.
Kata-kata akhir
Pernyataan tersebut if
adalah pernyataan sederhana tetapi merupakan bagian mendasar dari PowerShell. Anda akan menemukan diri Anda menggunakan ini beberapa kali di hampir setiap skrip yang Anda tulis. Kuharap kau punya pemahaman yang lebih baik dari sebelumnya.