5 เทคนิค PowerShell ที่เอาชนะ Bash บน Windows

/th/images/windows-powershell-vs-powershell.jpg

Bash ถือเป็นเชลล์ที่ได้รับความนิยมอย่างปฏิเสธไม่ได้สำหรับนักพัฒนาหลายคน โดยเฉพาะผู้ที่ทำงานบน Linux เป็นหลัก มันทรงพลัง ยืดหยุ่น และได้รับการทดสอบอย่างเข้มงวดมานานหลายปีแล้ว อย่างไรก็ตาม PowerShell ได้รับความนิยมมากขึ้นบน Windows เนื่องจากคุณสมบัติที่ทันสมัย ​​ใช้งานง่าย และการผสานรวมกับระบบปฏิบัติการอย่างแนบแน่น

ฉันขอชี้แจง: ฉันไม่ได้บอกว่า PowerShell ดีกว่า Bash ในทุกสถานการณ์ แต่ก็ยุติธรรมที่จะบอกว่า PowerShell ได้รับการออกแบบมาโดยเฉพาะสำหรับ Windows ดังนั้นจึงพูดภาษาของ Windows OS ได้ดีกว่าเชลล์อื่น ๆ ไม่ใช่แค่ Bash

ฉันใช้เชลล์ทั้งสองนี้มาระยะหนึ่งแล้วและพบเคล็ดลับบางอย่างของ PowerShell ที่มีประสิทธิภาพเหนือกว่า Bash อย่างต่อเนื่องเมื่อพูดถึงการจัดการระบบ Windows และระบบอัตโนมัติ

การทำงานกับวัตถุแทนข้อความธรรมดา

มหาอำนาจที่ยิ่งใหญ่ที่สุดของ PowerShell

ความแตกต่างหลักประการหนึ่งระหว่าง Bash และ PowerShell คือวิธีจัดการกับเอาต์พุต ใน Bash ผลลัพธ์ของทุกคำสั่งเป็นเพียงข้อความ หากคุณต้องการดึงข้อมูลที่เป็นประโยชน์ โดยปกติคุณจะต้องแยกวิเคราะห์ผลลัพธ์ผ่านเครื่องมือต่างๆ เช่น grep, awk หรือ cut นี่หมายถึงการจดจำรูปแบบและการจัดการสตริง แน่นอนว่าทำได้ แต่อาจเลอะเทอะและดูแลรักษาได้ยาก

PowerShell ต่างจาก Bash ที่ถือว่าทุกอย่างเป็นวัตถุไม่ใช่ข้อความ หมายความว่าเมื่อคุณเรียกใช้คำสั่ง เช่น Get-Process คุณจะได้รับข้อมูลที่มีโครงสร้างซึ่งคุณสามารถจัดเรียง กรอง และจัดรูปแบบเพิ่มเติมได้โดยไม่ต้องแยกวิเคราะห์สตริง

ตัวอย่างเช่น ดูคำสั่งนี้: Get-Process | โดยที่วัตถุ CPU-gt 100 | เลือก-ชื่อวัตถุ, CPU

การรันคำสั่งนี้ใน PowerShell จะแสดงรายการกระบวนการในระบบของคุณที่ใช้ CPU มากกว่า 100 หน่วย พร้อมด้วยชื่อและการใช้งาน โดยพื้นฐานแล้ว เพื่อค้นหากระบวนการที่มีการใช้งาน CPU สูงอย่างรวดเร็ว เมื่อรันคำสั่งแยกกัน ข้อมูลจะยังคงมีโครงสร้างตลอดทั้งไปป์ไลน์ นี่เป็นข้อได้เปรียบอย่างมากเมื่อคุณต้องเขียนสคริปต์งานที่ซับซ้อน Bash ไม่สามารถทำได้โดยกำเนิด

การเข้าถึงระบบนิเวศ Windows ทั้งหมด

ตั้งแต่การปรับแต่งรีจิสทรีไปจนถึงการจัดการระบบ

/th/images/reading-windows-startup-registry-entry-using-powershell.jpg

ดังที่ได้กล่าวไปแล้ว PowerShell พูดภาษาพื้นเมืองของ Windows OS ได้อย่างมีประสิทธิภาพมากที่สุด ฉันหมายความว่ามันสามารถเข้าถึงส่วนประกอบระดับระบบ เช่น รีจิสทรี ตัวกำหนดเวลางาน WMI (Windows Management Instrumentation) กระบวนการที่ทำงานอยู่ และบริการต่างๆ Bash ไม่มีสิทธิ์เข้าถึงสิ่งเหล่านี้ในตัวบน Windows

ตัวอย่างเช่น สมมติว่าคุณต้องการดูว่าแอปใดทำงานเมื่อเริ่มต้นระบบของคุณ ใน PowerShell คุณจะทราบได้ว่าเพียงเรียกใช้คำสั่งนี้: Get-ItemProperty-Path “HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"คุณกำลังสอบถามรีจิสทรีโดยตรงผ่านคำสั่งนี้ คุณสามารถเขียนสคริปต์เพิ่มเติมเพื่อปิดใช้งาน ลบ หรือแก้ไขรีจิสตรีคีย์ได้ด้วยความเรียบง่ายเหมือนเดิม ไม่เพียงเท่านั้น คุณยังสามารถเริ่มหรือหยุดบริการที่ทำงานบน Windows ด้วยคำสั่งง่ายๆ เช่น: Start-Service-Name wuauserv

การบูรณาการดังกล่าวค่อนข้างมีคุณค่าสำหรับผู้ดูแลระบบ เนื่องจากไม่จำเป็นต้องใช้เครื่องมือ GUI แยกต่างหากหรือสคริปต์ C# แบบกำหนดเอง

ทำงานอัตโนมัติด้วย cmdlets และโมดูล

คำสั่งที่ใช้ซ้ำได้ซึ่งสร้างขึ้นสำหรับ Windows

/th/images/installing-module-to-manage-windows-updates-from-powershell.jpg

อีกด้านที่ PowerShell เอาชนะ Bash และสิ่งหนึ่งที่ฉันชอบเกี่ยวกับ PowerShell คือการใช้ cmdlets คำสั่งเหล่านี้เป็นคำสั่งขนาดเล็กที่สร้างขึ้นตามจุดประสงค์ซึ่งเป็นไปตามรูปแบบคำกริยา-คำนามที่เข้าใจง่าย เช่น Get-Process, Start-Service และ Remove-Item สิ่งเหล่านี้สามารถอธิบายและคาดเดาได้ง่ายในสิ่งที่พวกเขาต้องการ

ใน Bash คุณต้องจำไวยากรณ์ที่แตกต่างกันโดยสิ้นเชิงสำหรับทุกเครื่องมือ นอกจากนี้ PowerShell ยังสนับสนุนระบบนิเวศที่กว้างขวางของโมดูลที่เพิ่มฟังก์ชันการทำงานมากยิ่งขึ้น ตัวอย่างเช่น หากคุณต้องการจัดการ Windows Updates ผ่านทางบรรทัดคำสั่ง เพียงติดตั้งโมดูล PSWindowsUpdate

หลังจากติดตั้งแล้ว เพียงใช้คำสั่งต่อไปนี้เพื่อติดตั้ง Windows Update ล่าสุด: Install-WindowsUpdate-AcceptAll-AutoReboot

ที่จะอัปเดต Windows โดยไม่ต้องเปิดการตั้งค่าด้วยซ้ำ นอกเหนือจากการอัปเดต Windows แล้ว ยังมีโมดูลที่มีประโยชน์เพิ่มเติม เช่น โมดูลสำหรับจัดการ Active Directory, Microsoft 365, Azure และแม้แต่ AWS Bash ก็มีแนวโน้มที่จะทำสิ่งที่คล้ายกัน แต่ PowerShell นั้นรวมเข้ากับระบบนิเวศของ Windows ได้ดีกว่า

การจัดการไฟล์และโฟลเดอร์ด้วยคำสั่งอัจฉริยะ

การจัดการไฟล์ด้วยวิธีง่ายๆ

/th/images/using-a-powershell-command-to-find-files-larger-than-100mb-in-a-folder.jpg

เมื่อคุณดูทั้ง Bash และ PowerShell จัดการไฟล์ได้ค่อนข้างดี แต่สำหรับ Windows แนวทางของ PowerShell มีความสอดคล้องและยืดหยุ่นมากกว่า ฉันพบว่าการจัดการไฟล์ของฉันบน Windows OS ทำได้ง่ายกว่าด้วยคำสั่ง PowerShell แบบง่ายๆ

ตัวอย่างเช่น หากต้องการคัดลอกไฟล์ PDF ทั้งหมดของโฟลเดอร์ไปยังโฟลเดอร์สำรอง เพียงเปิด PowerShell ในโฟลเดอร์ที่มีไฟล์ PDF อยู่ และใช้คำสั่งนี้: *.pdf C:\Backup

ในทำนองเดียวกัน หากต้องการค้นหาไฟล์ทั้งหมดที่มีขนาดใหญ่กว่า 100MB ในโฟลเดอร์ใดโฟลเดอร์หนึ่ง ให้เปิด PowerShell ลงในโฟลเดอร์นั้น และใช้คำสั่งต่อไปนี้: Get-ChildItem-Recurse | โดยที่วัตถุ {$_.ความยาว-gt 100MB}

ต้องขอบคุณไวยากรณ์คำกริยา-คำนามของ PowerShell คำสั่งทั้งหมดจึงมีโครงสร้างเดียวกัน ใน Bash คุณจะต้องมีเครื่องมือและแฟล็กที่แตกต่างกันเพื่อจัดการไฟล์อย่างเหมาะสม

การรีโมตและระบบอัตโนมัติทำได้ง่าย

การทำงานข้ามหลายระบบโดยไม่มีการเสียดสี

/th/images/enabling-psremoting-on-powershell.jpg

จุดแข็งของ PowerShell ที่ประเมินต่ำเกินไปคือการรองรับการทำงานระยะไกล PowerShell Remoting (PSRemoting) ช่วยให้คุณสามารถรันคำสั่งบนเครื่องระยะไกลผ่าน WinRM (Windows Remote Management) มีอยู่ในระบบและไม่ต้องใช้เซิร์ฟเวอร์ SSH บุคคลที่สาม

ตัวอย่างเช่น สมมติว่าคุณต้องการรีสตาร์ทบริการในพีซี 5 เครื่อง ใน Bash คุณจะต้องเข้าถึง SSH, คีย์ที่ใช้ร่วมกัน และลูป ใน PowerShell เพียงใช้คำสั่งนี้: Invoke-Command-ComputerName PC1, PC2, PC3, PC4, PC5-ScriptBlock { Restart-Service spooler }

กระชับ ปรับขนาดได้ และปลอดภัย คุณสามารถส่งข้อมูลประจำตัว เรียกใช้สคริปต์จากระยะไกล หรือใช้งานตามกำหนดเวลาได้ สิ่งนี้มีประโยชน์มากในสภาพแวดล้อมขององค์กรหรือไอทีที่คุณต้องการจัดการเครื่องหลายเครื่อง มันเหมือนกับการมีแผงควบคุมเดียวสำหรับเครื่องทุกเครื่อง แต่อยู่บนบรรทัดคำสั่งผ่านสคริปต์

PowerShell จะช่วยให้คุณมีสคริปต์ที่ดีขึ้นและใช้งานง่าย

อย่างที่ผมบอกไปแล้ว ไม่ต้องสงสัยเลยว่า Bash นั้นน่าทึ่งแค่ไหน โดยเฉพาะสำหรับเครื่อง Linux แต่หากคุณทำงานบน Windows เป็นส่วนใหญ่ การเปลี่ยนไปใช้ PowerShell จะทำให้คุณควบคุมระบบปฏิบัติการได้ดีกว่าเชลล์อื่นๆ มันมีคุณสมบัติและเครื่องมือมากกว่า Bash

Bash อาจยังคงเป็นตัวเลือกของฉันบน Linux แต่บน Windows PowerShell เป็นผู้ชนะที่ชัดเจน

*️⃣ ลิงค์ที่มา:

PowerShell การใช้งาน CPU สูง ซึ่งแอปทำงานเมื่อเริ่มต้นระบบของคุณ สลับไปใช้ PowerShell