ค้นหาเว็บไซต์

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 ด้วยตัวอย่างที่แตกต่างกัน

บทความที่เกี่ยวข้อง