การจัดรูปแบบการเรียนรู้ที่เกินบรรยายโรงเรียนการกรองและการเปรียบเทียบใน PowerShell
ในโรงเรียน Geek รุ่นนี้เราจะดูการจัดรูปแบบการกรองและการเปรียบเทียบวัตถุใน Pipeline.
อย่าลืมอ่านบทความก่อนหน้าในซีรีย์:
- เรียนรู้วิธีอัตโนมัติของ Windows ด้วย PowerShell
- เรียนรู้การใช้ Cmdlets ใน PowerShell
- เรียนรู้วิธีใช้วัตถุใน PowerShell
และคอยติดตามตลอดซีรีย์ที่เหลือตลอดทั้งสัปดาห์.
การจัดรูปแบบเริ่มต้น
เมื่อฉันเริ่มใช้ PowerShell ครั้งแรกฉันคิดว่าทุกอย่างเป็นเวทย์มนตร์ แต่ความจริงคือมันใช้เวลาเพียงเล็กน้อยในการทำความเข้าใจสิ่งที่เกิดขึ้นใต้ฝากระโปรง เช่นเดียวกับระบบการจัดรูปแบบ PowerShell ในความเป็นจริงถ้าคุณเรียกใช้ cmdlet รับบริการผลผลิตที่สร้างขึ้นจะแสดงคุณสมบัติ 3 อย่างเท่านั้น: สถานะชื่อและ DisplayName.
แต่ถ้าคุณไปที่ Get-Service เพื่อรับสมาชิกคุณจะเห็นว่าวัตถุ ServiceController มีมากกว่าคุณสมบัติสามอย่างนี้ดังนั้นสิ่งที่เกิดขึ้น?
คำตอบอยู่ในไฟล์ที่ซ่อนซึ่งกำหนดว่า cmdlet ในตัวส่วนใหญ่จะแสดงเอาต์พุตของพวกเขาอย่างไร หากต้องการทำความเข้าใจให้พิมพ์สิ่งต่อไปนี้ลงในเชลล์แล้วกด Enter.
notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
ถ้าเราใช้ฟังก์ชั่นค้นหาของ Notepad เราสามารถข้ามไปยังส่วนที่ให้รายละเอียดผลลัพธ์ของ Get-Service cmdlet ได้อย่างรวดเร็วโดยค้นหาประเภท ServiceController.
ทันใดนั้นคุณจะเห็นว่าภายใต้ประทุน PowerShell กำลังจัดรูปแบบวัตถุใด ๆ ในไปป์ไลน์ที่เป็น ServiceController ประเภทและสร้างตารางที่มีสามคอลัมน์: สถานะชื่อและ DisplayName แต่ถ้าประเภทที่คุณติดต่อด้วยไม่มีรายการในไฟล์นั้นหรือไฟล์รูปแบบอื่นสำหรับเรื่องนั้น งั้นมันก็ง่ายมาก ๆ ถ้าวัตถุที่ออกมาจากไปป์ไลน์มี 5 คุณสมบัติขึ้นไป PowerShell จะแสดงคุณสมบัติทั้งหมดของวัตถุในรายการ ถ้ามันมีคุณสมบัติน้อยกว่า 5 มันจะแสดงพวกเขาในตาราง.
การจัดรูปแบบข้อมูลของคุณ
หากคุณไม่พอใจกับการจัดรูปแบบเริ่มต้นของวัตถุหรือประเภทคุณสามารถม้วนการจัดรูปแบบของคุณเอง มีสาม cmdlets ที่คุณต้องรู้ในการทำเช่นนี้.
- รูปแบบรายการ
- รูปแบบตาราง
- รูปแบบไวด์
รูปแบบไวด์ เพียงแค่รวบรวมวัตถุและแสดงคุณสมบัติเดียวของแต่ละวัตถุ โดยค่าเริ่มต้นมันจะมองหาคุณสมบัติชื่อ; หากวัตถุของคุณไม่มีคุณสมบัติชื่อวัตถุนั้นจะใช้คุณสมบัติแรกของวัตถุเมื่อคุณสมบัติถูกเรียงลำดับตามตัวอักษร.
รับบริการ | รูปแบบไวด์
ตามที่คุณเห็นมันจะมีค่าเริ่มต้นเป็นสองคอลัมน์แม้ว่าคุณจะสามารถระบุทั้งคุณสมบัติที่คุณต้องการใช้รวมถึงจำนวนคอลัมน์ที่คุณต้องการให้แสดง.
รับบริการ | Format-Wide -Property DisplayName - คอลัมน์ 6
หากมีการจัดรูปแบบเป็นตารางโดยค่าเริ่มต้นคุณสามารถสลับเป็นมุมมองรายการได้ตลอดเวลาโดยใช้ Format-List cmdlet ลองมาดูที่ผลลัพธ์ของ Get-Process cmdlet.
มุมมองแบบตารางนี้เหมาะสมกับข้อมูลประเภทนี้เป็นอย่างดี แต่มาทำเป็นว่าเราต้องการดูในรูปแบบรายการ สิ่งที่เราต้องทำก็แค่ส่งไปที่ รูปแบบรายการ.
รับกระบวนการ | รูปแบบรายการ
อย่างที่คุณเห็นมีเพียงสี่รายการที่ปรากฏในรายการโดยค่าเริ่มต้น ในการดูคุณสมบัติทั้งหมดของวัตถุคุณสามารถใช้อักขระตัวแทน.
รับกระบวนการ | รูปแบบ - รายการ - คุณสมบัติ *
หรือคุณสามารถเลือกเฉพาะคุณสมบัติที่คุณต้องการ.
รับกระบวนการ | รูปแบบ - รายการ - ชื่อทรัพย์สิน, id
รูปแบบตาราง, ในทางกลับกันนำข้อมูลและเปลี่ยนเป็นตาราง เนื่องจากข้อมูลจาก Get-Process ของเราอยู่ในรูปแบบของตารางอยู่แล้วเราสามารถใช้เพื่อเลือกคุณสมบัติที่เราต้องการแสดงในตารางได้อย่างง่ายดาย ฉันใช้พารามิเตอร์ AutoSize เพื่อให้ข้อมูลทั้งหมดพอดีกับหน้าจอเดียว.
รับกระบวนการ | รูปแบบ - ชื่อตาราง id -AutoSize
การกรองและการเปรียบเทียบ
หนึ่งในสิ่งที่ดีที่สุดเกี่ยวกับการใช้ไปป์ไลน์แบบอิงวัตถุคือคุณสามารถกรองวัตถุออกจากไพพ์ไลน์ได้ทุกขั้นตอนโดยใช้ Where-Object cmdlet.
รับบริการ | ตำแหน่งที่วัตถุ $ _. สถานะ -eq“ กำลังทำงาน”
การใช้วัตถุเป็นเรื่องง่ายมาก $ _ แสดงถึงวัตถุไปป์ไลน์ปัจจุบันซึ่งคุณสามารถเลือกคุณสมบัติที่คุณต้องการกรอง ที่นี่มีเพียงการรักษาวัตถุที่ทรัพย์สินสถานะเท่ากับการทำงาน มีตัวดำเนินการเปรียบเทียบบางอย่างที่คุณสามารถใช้ในบล็อกสคริปต์การกรอง:
- eq (เท่ากับ)
- neq (ไม่เท่ากับ)
- gt (มากกว่า)
- ge (มากกว่าหรือเท่ากับ)
- lt (น้อยกว่า)
- le (น้อยกว่าหรือเท่ากับ)
- กดไลค์ (จับคู่สตริงสัญลักษณ์แทน)
รายการเต็มรูปแบบและข้อมูลเพิ่มเติมสามารถดูได้ในไฟล์ความช่วยเหลือเกี่ยวกับ concept_comparison แนวคิด แต่มันจะใช้เวลาสักครู่ในการใช้ชินกับไวยากรณ์ Where-Obeject นั่นคือทั้งหมดที่ในเวลานี้!