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

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

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