PowerShell โดยที่วัตถุในรายการ
ในบทช่วยสอน PowerShell นี้ ฉันจะอธิบายวิธีใช้ Where-object ในรายการใน PowerShell เราจะดูตัวอย่างต่างๆ ที่เกี่ยวข้องกับ “PowerShell Where-Object in List“
ใน PowerShell นั้น Where-Object cmdlet ใช้เพื่อกรององค์ประกอบในรายการตามเงื่อนไขที่ระบุ ตัวอย่างเช่น หากต้องการค้นหารายการทั้งหมดในรายการตัวเลขที่มากกว่า 10 คุณจะต้องใช้ $numbers | โดยที่วัตถุ { $_ -gt 10 } cmdlet นี้อนุญาตให้มีการกรองที่ซับซ้อนโดยรองรับบล็อกสคริปต์ที่มีเงื่อนไขซึ่งรวมถึงตัวดำเนินการเปรียบเทียบ เช่น -eq, -gt, -like และอื่นๆ
PowerShell โดยที่วัตถุในรายการ
Where-Object cmdlet เป็นส่วนหนึ่งของ cmdlet หลักของ PowerShell และใช้เพื่อเลือกออบเจ็กต์ที่มีค่าคุณสมบัติเฉพาะจากคอลเลกชันของออบเจ็กต์ที่ส่งผ่านไป cmdlet นี้มักใช้ในไปป์ไลน์ โดยจะกรองออบเจ็กต์ที่ส่งผ่านจาก cmdlet ก่อนหน้าตามบล็อกสคริปต์หรือเงื่อนไข
ต่อไปนี้เป็นไวยากรณ์พื้นฐานของ Where-Object cmdlet:
<Collection> | Where-Object { <Condition> } แสดงถึงชุดของวัตถุที่คุณกำลังทำงานด้วย และ คือบล็อกสคริปต์ที่ระบุเกณฑ์ที่วัตถุต้องปฏิบัติตามจึงจะรวมเข้าไปได้ เอาท์พุท
กรองรายการด้วย Where-Object ใน PowerShell
เมื่อทำงานกับรายการใน PowerShell Where-Object กลายเป็นสิ่งจำเป็นสำหรับการกรององค์ประกอบ สมมติว่าคุณมีรายการตัวเลข และต้องการค้นหาตัวเลขทั้งหมดที่มากกว่า 10 ต่อไปนี้คือวิธีที่คุณจะใช้ Where-Object เพื่อทำสิ่งนี้:
$numbers = 1..20
$filteredNumbers = $numbers | Where-Object { $_ -gt 10 }
$filteredNumbersในตัวอย่างนี้ $numbers คือรายการตัวเลขตั้งแต่ 1 ถึง 20 cmdlet Where-Object กรองรายการนี้ และเก็บเฉพาะตัวเลขที่มากกว่า 10 เท่านั้นใน $กรองตัวเลข.
หลังจากที่คุณรันโค้ดแล้ว คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่าง
ตัวอย่างของ PowerShell Where-Object พร้อมรายการ
ตัวอย่างที่ 1: การกรองสตริง
ลองนึกภาพคุณมีรายชื่อไฟล์ และต้องการค้นหาไฟล์ที่มีนามสกุล “.txt” ต่อไปนี้คือวิธีที่คุณสามารถใช้ Where-Object เพื่อกรองชื่อไฟล์เหล่านั้น:
$fileNames = @('report.txt', 'summary.pdf', 'log.txt', 'data.csv')
$textFiles = $fileNames | Where-Object { $_ -like '*.txt' }
$textFilesตัวดำเนินการ -like ใช้สำหรับการจับคู่รูปแบบ และอักขระตัวแทน * จะจับคู่สตริงอักขระใดๆ ดังนั้น เฉพาะชื่อไฟล์ที่ลงท้ายด้วย “.txt” เท่านั้นที่จะรวมอยู่ใน $textFiles
ตัวอย่างที่ 2: การกรองออบเจ็กต์แบบกำหนดเอง
สมมติว่าคุณมีรายการออบเจ็กต์แบบกำหนดเองที่เป็นตัวแทนของพนักงาน และคุณต้องการกรองพนักงานออกจากแผนกใดแผนกหนึ่ง นี่คือตัวอย่างการใช้ Where-Object:
$employees = @(
@{Name='John'; Department='Sales'},
@{Name='Jane'; Department='Marketing'},
@{Name='Dave'; Department='Sales'},
@{Name='Anna'; Department='HR'}
)
$salesEmployees = $employees | Where-Object { $_.Department -eq 'Sales' }
$salesEmployeesในกรณีนี้ $employees คืออาร์เรย์ของแฮชเทเบิล ซึ่งแต่ละรายการเป็นตัวแทนของพนักงาน Where-Object กรองพนักงานที่มีคุณสมบัติ แผนก เท่ากับ "การขาย"
นี่คือผลลัพธ์ในภาพหน้าจอด้านล่าง:
ตัวอย่างที่ 3: การรวมเงื่อนไข
คุณยังสามารถรวมเงื่อนไขหลายรายการได้โดยใช้ตัวดำเนินการเชิงตรรกะ เช่น -และ, -หรือ และ -not มากรองรายการกระบวนการเพื่อค้นหากระบวนการที่ใช้หน่วยความจำมากกว่า 50 MB และไม่มีชื่อว่า “svchost”:
$processes = Get-Process
$filteredProcesses = $processes | Where-Object { $_.WS -gt 50MB -and $_.Name -ne 'svchost' }
$filteredProcessesที่นี่ Get-Process ดึงรายการกระบวนการที่กำลังทำงานอยู่ทั้งหมด cmdlet Where-Object กรองรายการนี้ตามเงื่อนไขที่ระบุในบล็อกสคริปต์
บทสรุป
ในบทช่วยสอน PowerShell นี้ เราได้พูดคุยทุกอย่างเกี่ยวกับ PowerShell Where-Object in List ด้วยตัวอย่างที่แตกต่างกัน

