PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 7): The Pipe (และตัวอย่างมากมายให้เล่นด้วย)
หลังจากส่วนที่หก PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 6): โปรไฟล์ PowerShell และ ISE เราอุทิศตนเองให้กับหัวข้อต่างๆ ที่เกี่ยวข้อง แต่ก่อนที่เราจะมาดูคำตอบของแบบฝึกหัดที่หกกันก่อน นอกจากนี้เรายังจะมีการทบทวนอย่างรวดเร็วถึงสิ่งที่เราได้เรียนรู้ไปแล้วในส่วนที่ 6
ทบทวน (ตอนที่ 6)
ออกกำลังกาย
เปิด ISE สร้างโปรไฟล์ PowerShell สำหรับผู้ใช้ทั้งหมด แทรกคำสั่ง Start-Transcript ในบรรทัดแรก บันทึกไฟล์. เปิด PowerShell เกิดอะไรขึ้นกับผู้ใช้ทุกคน
นี่เป็นการออกกำลังกายที่ดีมาก ชื่นชมตัวเองบ้าง ;-) ฉันสามารถประนีประนอมสองสิ่งได้ การทำงานกับ ISE และการแนะนำคำสั่งใหม่: Start-Transcript เรามาเริ่มด้วยการสร้างโปรไฟล์ PowerShell สำหรับผู้ใช้ทุกคนกันก่อน ตามที่อธิบายไว้ในส่วนสุดท้าย เราต้องระบุเส้นทางผู้ใช้ทั้งหมด
New-Item $profile.AllUsersAllHosts -Force
ต่อไปเราต้องเปิดโปรไฟล์ที่สร้างขึ้น ฉันขอแนะนำสมุดบันทึก เมื่อเปิดแล้ว ให้พิมพ์ Start-Transcript แล้วคลิกบันทึก
ตอนนี้มาถึงช่วงเวลามหัศจรรย์ ปิดแผ่นจดบันทึกและ ISE แล้วเปิด PowerShell อย่างที่คุณเห็น PowerShell กำลังบันทึกอยู่ในขณะนี้ Start-Transcript จะบันทึกอินพุตทั้งหมดของคุณ
ตอนนี้ก็ขึ้นอยู่กับคุณแล้วที่จะทดสอบ ป้อนคำสั่งไม่กี่คำแล้วเปิดไฟล์การถอดเสียง ตำแหน่งของไฟล์สามารถพบได้ในโปรไฟล์ผู้ใช้ของคุณในโฟลเดอร์เอกสาร (ดังที่แสดงในภาพหน้าจอ)
สรุป
หากคุณต้องการให้ PowerShell ทำบางอย่างเมื่อเริ่มต้นระบบ ให้สร้างไฟล์โปรไฟล์ PowerShell ตระหนักถึงนโยบายการดำเนินการ PowerShell ISE เป็นตัวแก้ไขสคริปต์ที่มีประสิทธิภาพซึ่งสามารถช่วยคุณเขียนสคริปต์ได้
ไปป์ PowerShell
ตอนนี้เรามาถึงส่วนถัดไป ทำงานกับท่อ และนี่คือส่วนสำคัญของซีรีส์นี้ มาดำดิ่งกัน
ไปป์ไลน์ของ Windows PowerShell ช่วยให้คุณรวมคำสั่งตั้งแต่ 2 รายการขึ้นไปเข้ากับสัญลักษณ์ไปป์ได้ การทำงานกับไปป์เป็นเทคนิคสำคัญใน PowerShell คุณสามารถคิดได้ว่าเป็นการส่งต่อวัตถุไปยังคำสั่ง PowerShell อื่นๆ ในแง่ที่เป็นรูปธรรม ไปป์ นำทุกอย่างทางด้านซ้ายของไปป์ และ ส่งต่อไปยังคำสั่งทางด้านขวาของไปป์
ก่อนอื่น สัญลักษณ์ไปป์จะอยู่บนแป้นพิมพ์ของคุณ คุณสามารถค้นหาได้บนคีย์บอร์ดส่วนใหญ่ที่นี่:
ดังนั้น เป้าหมายในตอนนี้คือการรวมสองคำสั่งเข้ากับไปป์เพื่อให้คุณเห็นตัวอย่าง
ทบทวน
การทำงานกับไปป์เป็นเทคนิคสำคัญใน PowerShell ในแง่ที่เป็นรูปธรรม ไปป์จะนำทุกอย่างทางด้านซ้ายของไปป์และส่งต่อไปยังคำสั่งทางด้านขวาของไปป์
ตัวอย่าง: รับกระบวนการ | หยุดกระบวนการ
หลายๆ คนอาจคิดว่า “เฮ้ เยี่ยมเลย แต่ประเด็นคืออะไรล่ะ?” ตอนนี้ฉันจะแสดงให้คุณเห็นถึงพลังของไปป์ด้วยตัวอย่างง่ายๆ สมมติว่าเราต้องการปิดกระบวนการ Notepad และ Paint ทั้งหมด ถ้าอย่างนั้นเรามาจับพวกมันทั้งหมดแล้วส่งพวกมันไปที่ Stop-Process
แต่รอสักครู่ ก่อนที่เราจะเริ่มเราจะดูคำสั่งแยกกันก่อน ในคอมพิวเตอร์ของฉันมีกระบวนการ Notepad 2 กระบวนการและกระบวนการ Paint 2 กระบวนการ
ที่กล่าวว่า Get-Process จะจับ Notepad และกระบวนการ Paint ทั้งหมด ข้อควรจำ: ไปป์ นำทุกอย่างทางด้านซ้ายของไปป์ และ ส่งต่อไปยังคำสั่งทางด้านขวาของไปป์
ดังนั้น ถ้าเราวาง Get-Process ไว้ทางด้านซ้ายของไปป์ และ Stop-Process ไว้ทางด้านขวาของไปป์ กระบวนการทั้งหมดนี้ควรจะหยุดลง
Get-Process notepad,mspaint | Stop-Process
พวกเขาหายไปหมดแล้ว และถ้าคุณใส่ -verbose ต่อท้ายคำสั่ง คุณจะเห็นว่ากระบวนการทั้งหมดหยุดทันที และกระบวนการทั้งหมดมีรหัสกระบวนการที่แตกต่างกัน
ตัวอย่างเพิ่มเติมที่จะเล่นกับ ...
กำลังหยุดบริการ…
Get-Service spool*,*bits* | Stop-Service -Verbose
แสดงบันทึกเหตุการณ์ 5 รายการใหม่ล่าสุดจากบันทึกของระบบในมุมมองที่สวยงามด้วย Out-GridView
Get-EventLog -LogName system -Newest 5 | Out-GridView
เรียกดูบันทึกการตั้งค่า Windows (อยู่ที่ C:\Windows\Panther) และค้นหารายการบูตที่สำเร็จรายการแรกระหว่างการติดตั้ง
Get-ChildItem C:\Windows\Panther | Select-String 'First Boot'
กำลังค้นหารายการที่ไม่ซ้ำ ...
Get-Content C:\Temp\file1.txt | Get-Unique
หรือนับอะไรบางอย่าง...
Get-Content -Path C:\Temp\file1.txt | Get-Unique | Measure-Object
หากต้องการเจาะจงมากขึ้น:
Get-Content -Path C:\Temp\file1.txt | Get-Unique | Measure-Object | Select-Object Count
ในส่วนต่อไป ผมจะเน้นไปที่คำสั่งสามคำ ทั้งหมดเกี่ยวข้องกับการฟอร์แมตและการใช้ไปป์และเหมาะอย่างยิ่งสำหรับผู้เริ่มต้น เดินหน้าต่อไป
เราได้เรียนรู้อะไรบ้างจนถึงตอนนี้?
ไปป์จะนำทุกอย่างทางด้านซ้ายของไปป์และส่งต่อไปยังคำสั่งทางด้านขวาของไปป์
การวางท่อไปยังรูปแบบตาราง รูปแบบรายการ และรูปแบบกว้าง
รูปแบบตาราง
Format-Table cmdlet จัดรูปแบบผลลัพธ์ของคำสั่ง และใช้กับท่อ
ดูคำสั่งด้านล่าง มันแสดงให้คุณเห็นตาราง ส่วนหัวของตารางได้แก่ Mode, LastWriteTime, ความยาว และชื่อ
ตารางนี้มีการกำหนดไว้ล่วงหน้าแล้ว แต่ข่าวดีก็คือเราสามารถปรับเปลี่ยนตารางให้เหมาะกับความต้องการของเราได้ ให้ความสนใจกับส่วนหัวของตาราง พวกเขามีชื่อ และชื่อนี้มีความสำคัญมากสำหรับเรา คุณชอบสิ่งนั้นอย่างไร:
Get-ChildItem | Format-Table Name,LastWriteTime
สิ่งที่คุณต้องรู้คือชื่อตารางส่วนหัว จากนั้นคุณสามารถจัดเรียงเอาต์พุตใหม่ด้วย Format-Table หรือคุณสามารถละเว้นสิ่งต่างๆ ได้
ผมขอยกตัวอย่างอีกตัวอย่างหนึ่ง Get-Service แสดงบริการ Windows ทั้งหมด ขวา?
แต่ฉันไม่ชอบวิวนี้ ฉันต้องการเพียงสถานะและชื่อเท่านั้น นี่เป็นงานที่ง่าย เพียงไปป์ไปที่ Format-Table แล้วระบุสถานะและชื่อ
Get-Service | Format-Table Status,Name
ข้อมูลเพิ่มเติมเกี่ยวกับ Format-Table ใน Microsoft Docs:
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Format-Table?view=powershell-5.1
รูปแบบรายการ
เอาต์พุตเริ่มต้นได้รับการกำหนดค่าไว้ล่วงหน้าตามคำสั่ง คำสั่งบางคำสั่งแสดงข้อมูลมากเกินไป และนั่นเป็นสาเหตุที่ทำให้คำสั่งเหล่านั้นไม่แสดงเป็นตาราง แต่เป็นรายการ Get-NetIPConfiguration เป็นคำสั่งดังกล่าว
ตอนนี้เรารู้ส่วนหัวของรายการแล้ว ลองส่งคำสั่งนี้ไปที่ Format-List และเลือกเฉพาะ IPv6Address และ IPv4Address
Get-NetIPConfiguration | Format-List IPv4Address,IPv6Address
ดี. อย่าฟุ้งซ่านโดยวงเล็บ ในเบื้องหลัง การดำเนินการ WMI จะเริ่มต้นขึ้นโดยรับที่อยู่ IP นั่นคือสิ่งที่วงเล็บมีไว้เพื่อ
นอกจากนี้เรายังสามารถจัดรูปแบบเอาต์พุตของ Get-ChildItem ให้เป็นรายการได้
Get-ChildItem | Format-List Name,LastWriteTime
ข้อมูลเพิ่มเติมเกี่ยวกับ Format-List ที่นี่:
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Format-List?view=powershell-5.1
รูปแบบกว้าง
สุดท้ายแต่ไม่ท้ายสุด คำสั่งสุดท้ายสำหรับวันนี้ ชื่อนี้เรียกว่า Format-Wide และชื่อนี้บอกเราว่ามีหน้าที่อะไร: การจัดรูปแบบบางอย่างในรูปแบบกว้าง
Microsoft Docs เป็นรูปแบบกว้าง:
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Format-Wide?view=powershell-5.1
ทบทวน
Format-Table, Format-List และ Format-Wide ปรับเอาต์พุตของคำสั่ง ใช้กับท่อ
รูปแบบ-ตาราง, รูปแบบ-รายการ, รูปแบบกว้างในโหมดขั้นสูง
นั่นไม่ใช่จุดสิ้นสุดของบทความนี้ ตอนนี้ ฉันจะแสดงสิ่งที่น่าสนใจและมีประโยชน์เกี่ยวกับการจัดรูปแบบให้คุณดู นี่เป็นชุดเล็กๆ ของพารามิเตอร์การจัดรูปแบบที่มีประโยชน์ที่สุดของฉัน
รูปแบบ-ตาราง-ขนาดอัตโนมัติ
พารามิเตอร์จะปรับขนาดคอลัมน์ตามความกว้างของข้อมูล
Get-ChildItem C:\Temp | Format-Table -AutoSize
รูปแบบ-ตาราง-Wrap
แสดงข้อความที่เกินความกว้างของคอลัมน์ ตามค่าเริ่มต้น ข้อความที่เกินความกว้างของคอลัมน์จะถูกตัดทอน
Get-EventLog -LogName Security -Newest 2 | Format-Table -Wrap
รูปแบบ-กว้าง-คอลัมน์
ระบุจำนวนคอลัมน์
Get-ChildItem | Format-Wide -Column 3
ตัวอย่างเพิ่มเติม … Active Directory (หมายเหตุด้านข้าง)
หากคุณกำลังทำงานกับ Active Directory คุณยังสามารถใช้คำสั่งรูปแบบเพื่อแสดงผู้ใช้ได้ เข้าสู่ระบบตัวควบคุมโดเมนและเริ่ม PowerShell นี่คือตัวอย่างบางส่วน:
Get-AdUser administrator -Properties * | Format-Table CN,Enabled,LastLogonDate,SID -AutoSize -Wrap
Format-Table เหมาะสมกับคุณสมบัติบางอย่างเท่านั้น ใช้ Format-List เพื่อแสดงรายการเพิ่มเติม:
Get-ADUser administrator -Properties * | Format-List CN,Enabled,LastLogonDate,SID,Created,ProfilePath,ScriptPath,LockedOut
หรือทำเพื่อผู้ใช้ทั้งหมดที่มีพารามิเตอร์ Filter *
Get-ADUser -Filter * -Properties * | Format-Table CN,Enabled,LastLogonDate,SID -AutoSize -Wrap
ความคล้ายคลึงกับคนดังจากหนังปั๊มเหล็กนั้นเป็นเรื่องบังเอิญล้วนๆ ?
ออกกำลังกาย
แค่นั้นแหละสำหรับวันนี้ นี่คือแบบฝึกหัดจนถึงส่วนถัดไป
เรียกใช้ Get-Hotfix แสดงเฉพาะหมายเลข (KB) ของโปรแกรมแก้ไขด่วนและวันที่ติดตั้งในรูปแบบรายการ
วิธีแก้ปัญหาสามารถพบได้ในส่วนถัดไป
พบกันในบทความถัดไป: PowerShell สำหรับผู้เริ่มต้น (ตอนที่ 8): พลังของ PowerShell - การติดต่อกับออบเจ็กต์ (รับสมาชิก เลือกออบเจ็กต์)
แพทริค กรูเนาเออร์ MVP PowerShell


























