PowerShell Where-Object - ไม่เหมือนตัวดำเนินการ
หนึ่งใน cmdlet ที่มีประโยชน์ที่สุดใน PowerShell คือ Where-Object ซึ่งช่วยให้คุณสามารถกรองออบเจ็กต์ตามคุณสมบัติได้ ในบทช่วยสอน PowerShell นี้ เราจะมุ่งเน้นไปที่ตัวดำเนินการ -NotLike ที่ใช้กับ Where-Object ใน PowerShell เพื่อแยกรายการที่ไม่ตรงกับรูปแบบที่ระบุ นอกจากนี้ ฉันจะแสดงตัวอย่างบางส่วนของตัวดำเนินการ PowerShell Where-Object -NotLike
ตัวดำเนินการ Where-Object -NotLike ใน PowerShell ใช้เพื่อกรองออบเจ็กต์ที่ไม่ตรงกับรูปแบบไวด์การ์ดที่ระบุ ตัวอย่างเช่น หากต้องการแยกไฟล์ที่มีนามสกุล .txt ออกจากรายการ คุณจะต้องใช้ Get-ChildItem | โดยที่วัตถุ { $_.ชื่อ -NotLike '*.txt' } cmdlet นี้มีประโยชน์อย่างยิ่งสำหรับการปรับแต่งผลการค้นหาและจัดการผลลัพธ์ในสคริปต์อย่างมีประสิทธิภาพ
PowerShell โดยที่วัตถุ -NotLike
โดยที่วัตถุใน PowerShell กรองเอาต์พุตของคำสั่งโดยการประเมินบล็อกสคริปต์หรือนิพจน์กับแต่ละวัตถุที่ส่งผ่านไปป์ไลน์ หากนิพจน์ส่งคืน $true แสดงว่าวัตถุนั้นถูกส่งผ่านไป ถ้า $false วัตถุนั้นจะถูกละทิ้ง
ตัวดำเนินการ -NotLike
ตัวดำเนินการ -NotLike ใช้กับ PowerShell Where-Object เพื่อกรองออบเจ็กต์ที่ไม่ตรงกับรูปแบบที่ระบุโดยสตริงที่มีอักขระตัวแทน เครื่องหมายดอกจัน (*) คืออักขระตัวแทนทั่วไปที่แสดงถึงอักขระจำนวนเท่าใดก็ได้
ตัวอย่างเช่น หากคุณต้องการรับรายการไฟล์ทั้งหมดในไดเร็กทอรีที่ไม่มีนามสกุล .txt คุณสามารถใช้คำสั่งต่อไปนี้:
Get-ChildItem -Path "C:\MyFolder\" -File | Where-Object { $_.Name -NotLike '*.txt' }
คำสั่งนี้แสดงรายการทั้งหมดในไดเร็กทอรีด้านบน แต่ไม่รวมไฟล์ที่ลงท้ายด้วย .txt
คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:
PowerShell โดยที่วัตถุ - ตัวอย่างที่ไม่เหมือน
มาสำรวจตัวอย่างที่เป็นประโยชน์เพื่อดูการทำงานของ PowerShell Where-Object -NotLike
ตัวอย่างที่ 1: การกรองนามสกุลไฟล์
หากคุณต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีที่ไม่ใช่สคริปต์ PowerShell คุณสามารถใช้:
Get-ChildItem -Path C:\Scripts | Where-Object { $_.Extension -NotLike '.ps1' }คำสั่งนี้รับรายการทั้งหมดในไดเร็กทอรี C:\Scripts และกรองไฟล์ที่มีนามสกุล .ps1 ออก
ตัวอย่างที่ 2: ไม่รวมกระบวนการเฉพาะ
วิธีแสดงกระบวนการที่ทำงานอยู่ทั้งหมดยกเว้นกระบวนการที่ชื่อ "chrome":
Get-Process | Where-Object { $_.ProcessName -NotLike 'chrome' }คำสั่งนี้รับกระบวนการที่กำลังทำงานอยู่ทั้งหมด และละเว้นกระบวนการที่มีชื่อกระบวนการ "chrome"
ตัวอย่างที่ 3: การกรองตามเงื่อนไขหลายข้อ
คุณสามารถรวม -NotLike เข้ากับโอเปอเรเตอร์อื่นๆ เพื่อสร้างตัวกรองที่ซับซ้อนมากขึ้น ตัวอย่างเช่น หากต้องการค้นหาบริการทั้งหมดที่ไม่หยุดและไม่ได้ขึ้นต้นด้วย "win":
Get-Service | Where-Object { $_.Status -ne 'Stopped' -and $_.Name -NotLike 'win*' }คำสั่งนี้จะเรียกบริการทั้งหมดที่ไม่อยู่ในสถานะ "หยุด" และชื่อไม่ได้ขึ้นต้นด้วย "win"
ตัวอย่างที่ 4: การแยกรายการออกจากรายการ
หากคุณมีรายชื่อและต้องการยกเว้นชื่อบางชื่อ คุณอาจใช้:
$names = 'John', 'Jane', 'Doe', 'Smith'
$names | Where-Object { $_ -NotLike 'Doe' }ผลลัพธ์นี้จะส่งออกชื่อทั้งหมดยกเว้น "Doe"
เมื่อฉันรันสคริปต์ PowerShell โดยใช้โค้ด VS คุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่าง:
ตัวอย่างที่ 5: การกรองบันทึกเหตุการณ์
หากต้องการตรวจสอบบันทึกเหตุการณ์ของระบบสำหรับรายการที่ไม่ใช่ระดับข้อมูล:
Get-EventLog -LogName System | Where-Object { $_.EntryType -NotLike 'Information' }คำสั่งนี้รับรายการทั้งหมดในบันทึกเหตุการณ์ของระบบและกรองรายการที่เป็นประเภทรายการ "ข้อมูล" ออก
อ่าน PowerShell Like Operator
เคล็ดลับในการใช้ Where-Object -NotLike
- ใช้ Wildcards: ตัวดำเนินการ
-NotLikeรองรับ wildcard ซึ่งทำให้มีความหลากหลายสำหรับการจับคู่รูปแบบ ใช้*เพื่อแสดงอักขระจำนวนเท่าใดก็ได้ - ไม่คำนึงถึงขนาดตัวพิมพ์: โดยค่าเริ่มต้น ตัวดำเนินการ
-NotLikeจะไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ ใช้-CNotLikeสำหรับการเปรียบเทียบแบบคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ - รวมกับตัวดำเนินการอื่น: คุณสามารถใช้
-NotLikeร่วมกับตัวดำเนินการเปรียบเทียบอื่นๆ (เช่น-eq,-ne,-gt,-ltฯลฯ) เพื่อสร้างตัวกรองที่ซับซ้อน - เพิ่มประสิทธิภาพ: เมื่อทำงานกับชุดข้อมูลขนาดใหญ่ ให้พิจารณาใช้ cmdlets อื่นๆ เช่น
Select-Stringสำหรับไฟล์ข้อความหรือวิธี.Where()สำหรับ คอลเลกชันเพื่อเพิ่มประสิทธิภาพการทำงาน
บทสรุป
ตัวดำเนินการ Where-Object -NotLike มีประโยชน์มากใน PowerShell สำหรับการยกเว้นรายการที่ไม่ตรงกับรูปแบบบางอย่าง ในบทช่วยสอน PowerShell นี้ ฉันได้อธิบายวิธีใช้ตัวดำเนินการ Where-Object -NotLike ใน PowerShell พร้อมตัวอย่างบางส่วน

