วิธีใช้คำสั่ง PowerShell If Else
คำสั่ง If-Else เป็นพื้นฐานของภาษาการเขียนโปรแกรมใดๆ รวมถึงใน PowerShell ใช้เพื่อทดสอบว่าตรงตามเงื่อนไขหรือไม่ ทำให้คุณสามารถดำเนินการต่างๆ โดยอิงจากผลลัพธ์ได้
หลายเงื่อนไข คำสั่ง if-not และคำสั่ง else-if ทำให้คุณมีตัวเลือกที่หลากหลายในการทดสอบเงื่อนไขในแต่ละสถานการณ์ ความเข้าใจที่ดีเกี่ยวกับคำสั่ง if และวิธีการต่างๆ สามารถช่วยให้คุณเขียนสคริปต์ PowerShell ได้ดีขึ้นได้
ในบทความนี้ เราจะดูคำสั่ง PowerShell If Else โดยใช้วิธีต่างๆ เช่น if not, if และ และวิธีใช้หลายเงื่อนไข
PowerShell ถ้าคำสั่ง
เริ่มต้นด้วยคำสั่ง If พื้นฐานใน PowerShell คำสั่ง If ที่ไม่มีตัวดำเนินการใดๆ จะตรวจสอบว่าเงื่อนไขเป็นจริงหรือไม่ เมื่อเงื่อนไขเป็นจริง บล็อกสคริปต์จะถูกดำเนินการ เงื่อนไขถูกวางไว้ระหว่างวงเล็บ ( ) และบล็อกสคริปต์อยู่ระหว่างวงเล็บปีกกา { }.
if (condition) {
# code to execute if condition is true
}ในตัวอย่างด้านล่าง เราได้ตั้งค่าตัวแปร $isAdmin เป็น True ต่อไป เราจะตรวจสอบด้วยคำสั่ง if ว่าตัวแปรถูกตั้งค่าเป็นจริงหรือไม่และเขียนเอาต์พุต:
$isAdmin = $true
if ($isAdmin) {
Write-Host "You have administrator privileges."
}
ในตัวอย่างด้านบน เราใช้ตัวแปรอย่างง่ายที่ตั้งค่าเป็น $true สำหรับคำสั่งเงื่อนไข แต่เรายังสามารถใช้ตัวดำเนินการเปรียบเทียบในเงื่อนไขได้ ตัวดำเนินการเปรียบเทียบจะส่งคืนค่าจริงหรือเท็จ ขึ้นอยู่กับผลลัพธ์ ลองทำสิ่งต่อไปนี้ภายในหน้าต่าง PowerShell ของคุณ:
$num = 10
$num -gt 5
# Result
Trueอย่างที่คุณเห็น ตัวดำเนินการเปรียบเทียบส่งคืนค่าจริง ดังนั้นหากเราเพิ่มตัวอย่างนี้ไว้ในส่วนเงื่อนไขของคำสั่ง If เราสามารถทดสอบได้ว่าตัวเลข $num มากกว่า 5 หรือไม่ และส่งออกสตริงไปยังคอนโซล:
$num = 10
if ($num -gt 5) {
# $num is greater then 5
Write-Host "$num is greater then 5"
}ตัวดำเนินการเปรียบเทียบอื่นๆ ที่คุณใช้ใน PowerShell ได้แก่:
| Operator | Counter-Part operator | Description |
|---|---|---|
| -eq | -ne | Equal or not equal |
| -gt | -lt | Greater or less than |
| -ge | Great than or equal to | |
| -le | Less than or equal to | |
| -Like | -NotLike | Match a string using * wildcard or not |
| -Match | -NotMatch | Matches or not the specified regular expression |
| -Contains | -NotContains | Collection contains a specified value or not |
| -In | -NotIn | Specified value in collection or not |
| -Replace | Replace specified value |
การใช้ Cmdlets ในเงื่อนไข If
นอกจากตัวแปรและตัวดำเนินการเปรียบเทียบแล้ว เรายังสามารถใช้ cmdlets ภายในเงื่อนไขคำสั่ง if ได้อีกด้วย ตัวอย่างเช่น เราสามารถสร้างเซสชัน PowerShell ไปที่ Server01 ได้ก็ต่อเมื่อการ ping ไปยังเซิร์ฟเวอร์สำเร็จ โดยใช้ test-connection cmdlet
if (Test-Connection -TargetName Server01 -Quiet) {
New-PSSession -ComputerName Server01
}else{
Write-Host "Unable to connect to server01"
}คำแนะนำ
ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนสคริปต์ PowerShell จากนั้นตรวจสอบให้แน่ใจว่าคุณได้อ่านการเริ่มต้นใช้งานคู่มือการเขียนสคริปต์ PowerShell นี้
คำสั่ง If-Else
คำสั่ง if มักจะมาพร้อมกับคำสั่ง else ใน PowerShell ส่วนอื่นของคำสั่งจะถูกดำเนินการเมื่อเงื่อนไขเป็นเท็จหรือเป็นโมฆะ จากตัวอย่างสุดท้ายของเรา เราสามารถเพิ่มคำสั่ง else ที่จะแจ้งให้เราทราบว่า $num น้อยกว่า 5 หรือไม่:
$num = 10
if ($num -gt 5) {
# $num is greater then 5
Write-Host "$num is greater then 5"
}else{
# $num is less then 5
Write-Host "$num is less then 5"
}ส่วนอื่นของคำสั่ง if-else จะทริกเกอร์เช่นกันเมื่อไม่ได้ตั้งค่าตัวแปร ตัวอย่างเช่น ถ้าเราตั้งค่าตัวแปร $num ให้เป็นสตริงว่าง เงื่อนไข else จะทริกเกอร์:
ถ้า Elseif คำสั่งอื่น
เราสามารถขยายคำสั่ง If Else ของเราให้ดียิ่งขึ้นด้วยคำสั่ง elseif Elseif ช่วยให้คุณสามารถทดสอบเงื่อนไขเพิ่มเติมได้ สิ่งที่น่ารู้คือ คุณไม่ได้ถูกจำกัดอยู่เพียงเงื่อนไข elseif เพียงเงื่อนไขเดียว คุณสามารถเพิ่มได้มากเท่าที่คุณต้องการระหว่างคำสั่ง if และ else แต่โปรดจำไว้ว่าเมื่อตรงตามคำสั่ง if หรือ elseif คำสั่งอื่นๆ จะไม่ถูกทดสอบอีกต่อไป
$num = 10
if ($num -gt 10) {
Write-Host "$num is greater then 10"
}elseif ($num -gt 5) {
Write-Host "$num is greater then 5"
}else{
Write-Host "$num is less then 5"
}
# Result
10 is greater then 5
อีกทางเลือกหนึ่งสำหรับคำสั่ง elseif หลายรายการคือการใช้คำสั่ง switch หรือใช้คอลเลกชันและตัวดำเนินการเปรียบเทียบ -in ตัวดำเนินการ -in ช่วยให้คุณสามารถตรวจสอบว่าคอลเลกชันมีค่าที่ระบุหรือไม่ ตัวอย่างเช่น เราสามารถตรวจสอบได้ว่ามีรายการผลไม้อยู่ในคอลเลกชันหรือไม่:
$collection = @(
'apple',
'banana',
'kiwi',
'raspberry'
)
$fruit = 'kiwi'
if ($fruit -in $collection) {
write-host "$fruit is a approved fruit"
}
# Result
kiwi is a approved fruitPowerShell ถ้าและคำสั่ง
คำสั่ง If And ใน PowerShell ช่วยให้คุณสามารถทดสอบหลายเงื่อนไขภายใน if เดียว ซึ่งบางครั้งไม่จำเป็นต้องใช้คำสั่ง If ที่ซ้อนกันหรือคำสั่ง if-else หลายคำสั่ง คำสั่ง If และ ตรวจสอบว่าเงื่อนไขตั้งแต่ 2 เงื่อนไขขึ้นไปเป็นจริงหรือไม่ เมื่อเงื่อนไขทั้งหมดเป็นจริง บล็อกสคริปต์จะถูกดำเนินการ:
# Using the -and operator
if ((condition1) -and (condition2)) {
# code to execute when condition 1 and condition 2
# are both true
}ฉันชอบที่จะวางแต่ละเงื่อนไขระหว่างวงเล็บ ( ) ซึ่งทำให้โค้ดอ่านง่ายขึ้น แต่ไม่จำเป็นเสมอไป ในตัวอย่างข้างต้น คุณสามารถละทิ้งสิ่งเหล่านี้ได้ เช่นนี้
if ($num -ge 1t -and $num -lt 20) { #code }เรามาเริ่มด้วยตัวอย่างง่ายๆ เราจะตรวจสอบว่าตัวเลขอยู่ระหว่าง 10 ถึง 20 หรือไม่ ก่อนอื่นเราจะตรวจสอบว่าตัวแปร $num มากกว่า 10 หรือไม่ และในเงื่อนไขที่สองหากน้อยกว่านั้น 20.
$num = 12
if (($num -gt 10) -and ($num -lt 20)) {
Write-Host "$num is between 10 and 20"
}
# Tip: you could also use the -in operator to check if the number is withing a range:
if ($num -in 11..19) {
Write-Host "$num is between 10 and 20"
}โปรดทราบว่าเรากำลังทดสอบว่าตัวเลขอยู่ระหว่าง 10 ถึง 20 หรือไม่ หากคุณต้องการรวม 10 และ 20 ให้ใช้ -ge (มากกว่าหรือเท่ากับ) และ -le ตัวดำเนินการ (น้อยกว่าหรือเท่ากับ)
การใช้คำสั่ง If Or
เช่นเดียวกับ if และเพื่อตรวจสอบว่าตรงตามเงื่อนไขหลายข้อหรือไม่ เราจะทดสอบได้ไหมว่าตรงตามเงื่อนไขข้อใดข้อหนึ่งด้วยตัวดำเนินการตามเงื่อนไข -หรือ เมื่อใช้ตัวดำเนินการ -หรือ เงื่อนไขใดเงื่อนไขหนึ่งเท่านั้นที่ต้องเป็นจริงจึงจะสามารถดำเนินการบล็อกสคริปต์ได้
if ((condition1) -or (condition2)) {
# code to execute when condition 1 or condition 2 is true
}ตัวอย่างเช่น เราสามารถตรวจสอบได้ว่าบทบาทของผู้ใช้เป็นผู้ดูแลระบบหรือนักพัฒนา ก่อนที่จะดำเนินการต่อ:
$role = "developer"
if (($role -eq 'admin') -or ($role -eq 'developer')) {
# code to execute
write-host 'The user is allowed to continue'
}PowerShell ถ้าไม่ใช่
คำสั่ง PowerShell If จะตรวจสอบว่าเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงหรือไม่ แต่บางครั้งคุณเพียงต้องการตรวจสอบว่าเงื่อนไขนั้นเป็นเท็จหรือไม่ สำหรับสิ่งนี้ เราสามารถใช้คำสั่ง If Not ใน PowerShell วิธีนี้จะตรวจสอบว่าไม่ตรงตามเงื่อนไขหรือไม่ คำสั่ง if not ถูกเขียนโดยการวางเงื่อนไขระหว่างวงเล็บ ( ) และใส่ ! หรือ -not ไว้ข้างหน้า:
if (!(condition1)) {
# code to execute when condition 1 is false
}
# or using -not
if (-not(condition1)) {
# code to execute when condition 1 is false
}ตัวอย่างที่ดีสำหรับสิ่งนี้คือ Test-Path cmdlet ซึ่งจะตรวจสอบว่ามีเส้นทางหรือไฟล์อยู่หรือไม่ ก่อนที่เราคัดลอกไฟล์ไปยังไดเร็กทอรี เราจำเป็นต้องตรวจสอบว่ามีโฟลเดอร์อยู่หรือไม่ หากไม่มี เราต้องสร้างมันขึ้นมา
If (!(Test-Path -Path $pathToFolder -PathType Container)) {
New-Item -ItemType Directory -Path $pathToFolder | Out-Null
}ตัวดำเนินการแบบประกอบไปด้วย PowerShell
บรรทัดหนึ่งบรรทัดถ้าคำสั่งเป็นวิธีปฏิบัติทั่วไปในภาษาการเขียนโปรแกรมหลายภาษาในปัจจุบัน จริงๆ แล้ว คำสั่ง one-line if เรียกว่าตัวดำเนินการแบบไตรภาค และเราสามารถใช้ได้ใน PowerShell 7 ตัวดำเนินการแบบไตรภาคเหมาะมากเมื่อคุณมีคำสั่ง short if แบบง่ายๆ ที่คุณสามารถเขียนในบรรทัดเดียวได้ เมื่อคำสั่ง if ทริกเกอร์บล็อกสคริปต์หลายบรรทัด ตัวดำเนินการแบบไตรภาคจึงไม่ใช่ตัวเลือกที่ดีที่สุด
ตัวดำเนินการแบบไตรภาคใช้โครงสร้างต่อไปนี้สำหรับคำสั่ง if-else:
<condition> ? <script-when-true> : <script-when-false>;เรามายกตัวอย่างตั้งแต่ต้นบทความกันดีกว่า เราจะตรวจสอบว่าตัวเลขมากกว่า 5 หรือไม่ แทนที่จะเขียนคำสั่ง if-else แบบเต็มซึ่งมีความยาวอย่างน้อย 5 บรรทัด เราสามารถเขียนมันลงในบรรทัดเดียวได้โดยใช้ตัวดำเนินการแบบไตรภาค:
$value = 10
$value -gt 5 ? (Write-Host 'Greater than 5') : (Write-Host 'Less than or equal to 5')PowerShell ถ้าเป็นโมฆะ
แนวทางปฏิบัติทั่วไปอีกประการหนึ่งคือการตรวจสอบว่าตัวแปรหรือผลลัพธ์จาก cmdlet เป็นโมฆะหรือไม่ ตัวแปร null คือตัวแปรที่ไม่ได้รับการกำหนดค่าหรือถูกกำหนดให้เป็นค่า null อย่างชัดเจน เพียงแค่ตั้งค่า ตัวแปร null จะไม่มีข้อมูลใดๆ เก็บไว้
เพื่อตรวจสอบว่าตัวแปรหรือผลลัพธ์เป็นโมฆะหรือว่างเปล่า เราจะเปรียบเทียบกับตัวแปร $null ตัวแปร $null ต้องอยู่ทางด้านซ้าย เพื่อให้แน่ใจว่า PowerShell เปรียบเทียบค่าอย่างถูกต้อง
สมมติว่าเราต้องการตรวจสอบว่าตัวแปรว่างเปล่าหรือไม่ หากเราวางตัวแปรโดยมีสตริงว่างทางด้านซ้าย ผลลัพธ์ก็คือตัวแปรนั้นไม่ว่างเปล่า
$var = ""
if ($var -eq $null) {
Write-Host "The variable is null."
}else{
Write-Host "The variable is not empty."
}
# Result
The variable is not empty.อย่างไรก็ตาม หากเราใส่ตัวแปร $null ก่อน ผลลัพธ์ก็คือตัวแปรนั้นว่างเปล่า:
$var = ""
if ($null -eq $var) {
Write-Host "The variable is null."
}else{
Write-Host "The variable is not empty."
}
# Result
The variable is null.ผลลัพธ์ที่แตกต่างกันเกิดขึ้นเนื่องจากเหตุผลสองประการใน PowerShell:
$nullคือค่าสเกลาร์ ตัวดำเนินการเปรียบเทียบจะส่งกลับค่าบูลีนเมื่อค่าทางด้านซ้ายเป็นสเกลาร์ หรือส่งกลับค่าที่ตรงกัน/อาร์เรย์ว่างหากเป็นคอลเล็กชัน- PowerShell ทำการแคสต์ประเภทจากซ้ายไปขวา ซึ่งส่งผลให้เกิดการเปรียบเทียบที่ไม่ถูกต้องเมื่อมีการแปลง
$nullเป็นสเกลาร์ประเภทอื่น
ดังนั้นหากคุณต้องการตรวจสอบว่าค่าเป็นโมฆะหรือไม่ คุณต้องวาง $null ไว้ทางด้านซ้าย
การตรวจสอบว่าค่าเป็นโมฆะใน PowerShell ไม่ได้ใช้เฉพาะกับตัวแปรเท่านั้น คุณยังสามารถใช้เพื่อตรวจสอบว่า cmdlet ส่งคืนข้อมูลใด ๆ หรือไม่ ตัวอย่างเช่น เราสามารถตรวจสอบว่าโมดูล PowerShell ได้รับการติดตั้งด้วยรหัสต่อไปนี้หรือไม่:
if ($null -eq (Get-Module -ListAvailable -Name Microsoft.Graph)) {
Write-host "Microsoft Graph module is not installed"
}ห่อขึ้น
คำสั่ง PowerShell If Else เป็นพื้นฐานของการเขียนสคริปต์ ช่วยให้คุณสามารถเปรียบเทียบค่าและตัดสินใจในสคริปต์ของคุณโดยพิจารณาจากผลลัพธ์ เมื่อใช้เงื่อนไข elseif หลายเงื่อนไข คุณอาจต้องการพิจารณาใช้คำสั่ง PowerShell Switch ซึ่งช่วยให้คุณสามารถตรวจสอบเงื่อนไขต่างๆ ได้สะอาดตาและง่ายขึ้น
ฉันหวังว่าบทความนี้จะมีประโยชน์ หากคุณมีคำถามใด ๆ เพียงแสดงความคิดเห็นด้านล่าง

