อาร์เรย์ PowerShell ประกอบด้วยคำอธิบาย
อาร์เรย์ช่วยให้คุณสามารถเก็บค่าหลายค่าไว้ในตัวแปรเดียว วิธีนี้ทำให้คุณสามารถวนซ้ำแต่ละค่าและประมวลผลในสคริปต์ของคุณได้อย่างง่ายดาย แต่บางครั้งคุณต้องตรวจสอบว่าอาร์เรย์ PowerShell มีค่าเฉพาะหรือไม่
หากต้องการตรวจสอบว่ามีค่าอยู่ในอาร์เรย์หรือไม่ เราสามารถใช้ตัวดำเนินการ -Contains ใน PowerShell สิ่งนี้จะส่งคืนค่าจริงหากมีค่าอยู่ แต่มีตัวเลือกอื่นเช่นกัน
ในบทความนี้ ฉันจะแสดงวิธีที่คุณสามารถตรวจสอบได้ว่า อาร์เรย์ PowerShell มีค่า เฉพาะเจาะจงหรือไม่ และอธิบายวิธีการต่างๆ
อาร์เรย์ PowerShell ประกอบด้วย
วิธีที่แนะนำในการตรวจสอบว่าอาร์เรย์มีค่าเฉพาะหรือไม่คือการใช้ตัวดำเนินการ -contains หรือเมธอด .Contains() ใน PowerShell แม้ว่าทั้งสองจะดูคล้ายกัน แต่ก็มีความแตกต่างที่สำคัญระหว่างทั้งสอง
ขั้นแรก มาดูวิธีใช้โอเปอเรเตอร์ -contains กันก่อน หากต้องการตรวจสอบว่าสตริงอยู่ในอาร์เรย์หรือไม่ คุณสามารถทำสิ่งต่อไปนี้:
$array = @('apple', 'banana', 'cherry')
if ($array -contains 'banana') {
Write-Host "Array contains banana"
}else{
Write-Host "Banana not found in the array"
}
วิธีการข้างต้นจะตรวจสอบว่ามีสตริงอยู่ในอาร์เรย์หรือไม่ การเปรียบเทียบไม่คำนึงถึงขนาดตัวพิมพ์ และผู้ปฏิบัติงานจะหยุดเมื่อพบผลลัพธ์ ดังนั้นเมื่อรายการ ซึ่งเป็นผลไม้ในตัวอย่างข้างต้น ถูกแสดงรายการหลายครั้งในอาร์เรย์ รายการนั้นจะยังคงส่งกลับค่าเป็น True หรือ False
ดังนั้นจึงมีตัวเลือกอื่นๆ สองสามตัวเลือกในการตรวจสอบว่าค่าแสดงอยู่ในอาร์เรย์หรือไม่ นอกจากวิธี .Contains() แล้ว เรายังสามารถใช้:
- ตัวดำเนินการในตัว - ตรวจสอบว่าค่าอยู่ในอาร์เรย์หรือไม่ ซึ่งเป็นอีกวิธีในการเขียน
- -ccontains ตัวดำเนินการ - การเปรียบเทียบแบบคำนึงถึงขนาดตัวพิมพ์
- -eq - สามารถตรวจสอบว่าอาร์เรย์มีค่าเฉพาะหรือไม่
- ที่ไหน-วัตถุ - ช่วยให้คุณสามารถทำการเปรียบเทียบที่ซับซ้อนมากขึ้น
ตรวจสอบให้แน่ใจว่าคุณได้อ่านบทความตัวดำเนินการ PowerShell ด้วยหากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกต่างๆ
ประกอบด้วยตัวดำเนินการเทียบกับวิธีการบรรจุ
ดังนั้นก่อนอื่นฉันอยากจะอธิบายความแตกต่างระหว่างตัวดำเนินการบรรจุกับวิธีการบรรจุก่อน เพราะมันดูคล้ายกันมาก แต่ก็มีอะไรที่มากกว่านั้น
วิธีการ ประกอบด้วย ซึ่งเขียนว่า .contains() เป็นวิธีการจากเฟรมเวิร์ก .NET พื้นฐาน ในขณะที่ตัวดำเนินการนั้นเฉพาะกับ PowerShell ตอนนี้วิธี .NET ทำงานเร็วขึ้น ดังนั้นเมื่อคุณต้องการค้นหาค่าในอาเรย์ขนาดใหญ่ ก็จะมีประโยชน์อย่างแท้จริง
ข้อแตกต่างที่สำคัญอีกประการระหว่างทั้งสองคือเมธอด contains คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยค่าเริ่มต้น ในขณะที่ตัวดำเนินการไม่:
$array = @('apple', 'banana', 'cherry', 'banana')
$array -contains 'Banana' # Returns true
$array.Contains('Banana') # Returns falseประกอบด้วยโดยคำนึงถึงขนาดตัวพิมพ์
ตามที่กล่าวไว้ ตัวดำเนินการ contains คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งมักจะใช้ได้อย่างสมบูรณ์แบบ แต่เมื่อคุณสามารถจับคู่ค่าตัวพิมพ์ทุกประการได้โดยใช้ตัวดำเนินการ -ccontains (โปรดสังเกต double c)
$array = @('apple', 'banana', 'cherry', 'banana')
# Case sensitive comparison
$array -ccontains 'Banana' # Returns falseอาร์เรย์ไม่มี
แทนที่จะตรวจสอบว่าอาร์เรย์มีค่าเฉพาะหรือไม่ เรายังสามารถตรวจสอบได้ว่าอาร์เรย์ไม่มีค่าที่ระบุอีกด้วย ในการดำเนินการนี้ เราสามารถใช้ตัวดำเนินการ -notcontains ตัวดำเนินการจะส่งคืนค่า True หากค่าไม่อยู่ในอาร์เรย์
ตัวอย่างเช่น เรามีรายชื่อผู้ใช้ที่สำเร็จการศึกษาการฝึกอบรมด้านความปลอดภัย และเราต้องการตรวจสอบว่าผู้ใช้รายใด ยังไม่ ผ่านการฝึกอบรมดังกล่าว ในกรณีนี้ -notcontains เป็นตัวเลือกที่สมเหตุสมผลกว่าในการใช้งาน:
# List of users
$completedTraining = @('John', 'Alice', 'Robert', 'Sarah')
# Check if the user has not completed the training
if ($completedTraining -notcontains 'Jane'){
Write-Host "Jane didn't completed the training"
}การใช้ตัวดำเนินการ -In
ตัวดำเนินการ -in เหมือนกับตัวดำเนินการบรรจุ แต่จะกลับกันเท่านั้น นอกจากนี้ยังคืนค่าเป็นจริงเมื่อค่าอยู่ในอาร์เรย์ ข้อแตกต่างเพียงอย่างเดียวคือคุณวางอาร์เรย์ไว้ทางด้านขวาของตัวดำเนินการ แทนที่จะเป็นด้านซ้าย
คุณควรใช้ตัวดำเนินการ -in เมื่อใช้งานง่ายและกระชับกับสถานการณ์ ตัวอย่างเช่น หากเราต้องการตรวจสอบว่าผู้ใช้เป็นสมาชิกของกลุ่มผู้ดูแลระบบหรือไม่ ก็ควรตรวจสอบว่า "เจน" อยู่ในกลุ่มผู้ดูแลระบบหรือไม่ มากกว่าที่จะตรวจสอบว่ากลุ่มผู้ดูแลระบบมี "เจน" หรือไม่:
# List of admin users
$adminUsers = @('John', 'Alice', 'Robert')
# Using the -in operator
if ('Alice' -in $adminUsers) {
Write-Output "Alice is an admin."
}สิ่งสำคัญที่นี่คือการทำให้โค้ดของคุณอ่านและทำความเข้าใจได้ง่ายขึ้น คุณยังสามารถใช้ตัวดำเนินการ -notin ซึ่งจะตรวจสอบว่าค่าไม่อยู่ในอาร์เรย์หรือไม่
ผู้ประกอบการที่เท่าเทียมกัน
คุณอาจไม่คาดคิด แต่เรายังสามารถใช้ตัวดำเนินการ -eq เพื่อตรวจสอบว่าอาร์เรย์มีค่าเฉพาะใน PowerShell หรือไม่ ความแตกต่างอย่างมากกับตัวดำเนินการ -contains อย่างไรก็ตาม ตัวดำเนินการที่เท่ากันจะไม่ส่งคืนค่าจริงหรือเท็จ แต่จะส่งคืนค่า
และที่สำคัญกว่านั้นคือไม่หยุดค้นหาค่าเมื่อพบค่าแล้ว ซึ่งหมายความว่าเราสามารถนับหรือตรวจสอบว่าค่าถูกแสดงหลายครั้งในอาร์เรย์หรือไม่:
$array = @('apple', 'banana', 'cherry', 'banana')
$result = $array -eq "banana"
if ($result) {
Write-Host "Banana is listed $($result.Length) time(s) in the array"
}
# Result
Banana is listed 2 time(s) in the arrayการใช้ Where-Object
ตัวเลือกสุดท้ายที่ฉันต้องการแสดงให้คุณเห็นคือวิธี Where-Object เพื่อตรวจสอบว่าอาร์เรย์มีค่าเฉพาะหรือไม่ วิธีการนี้ส่วนใหญ่จะใช้เมื่อคุณมีอาร์เรย์ของออบเจ็กต์หรือจำเป็นต้องทำการเปรียบเทียบที่ซับซ้อนอื่นๆ
ตัวอย่างเช่น เรามีอาร์เรย์ที่มีอ็อบเจ็กต์ผู้ใช้ และต้องการตรวจสอบว่าอาร์เรย์มีผู้ใช้เฉพาะหรือไม่:
$users = @(
[PSCustomObject]@{ Name = 'John'; Age = 30 },
[PSCustomObject]@{ Name = 'Jane'; Age = 25 },
[PSCustomObject]@{ Name = 'Alice'; Age = 28 }
)
$result = $users | Where-Object { $_.Name -contains 'Jane'}ห่อขึ้น
วิธีทั่วไปในการตรวจสอบว่าอาร์เรย์มีค่าเฉพาะหรือไม่คือการใช้ตัวดำเนินการ -contains โปรดทราบว่านี่เป็นกรณีคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ในขณะที่เมธอด .contains() คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
พยายามใช้โอเปอเรเตอร์ที่เหมาะสมกับสถานการณ์ ซึ่งจะทำให้โค้ดของคุณอ่านและเข้าใจได้ง่ายขึ้น
หวังว่าคุณจะชอบบทความนี้ หากคุณมีคำถามใด ๆ เพียงแสดงความคิดเห็นด้านล่าง
