
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 ทั้งหมด
ตั้งแต่การปรับแต่งรีจิสทรีไปจนถึงการจัดการระบบ

ดังที่ได้กล่าวไปแล้ว 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

อีกด้านที่ 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 ได้ดีกว่า
การจัดการไฟล์และโฟลเดอร์ด้วยคำสั่งอัจฉริยะ
การจัดการไฟล์ด้วยวิธีง่ายๆ

เมื่อคุณดูทั้ง Bash และ PowerShell จัดการไฟล์ได้ค่อนข้างดี แต่สำหรับ Windows แนวทางของ PowerShell มีความสอดคล้องและยืดหยุ่นมากกว่า ฉันพบว่าการจัดการไฟล์ของฉันบน Windows OS ทำได้ง่ายกว่าด้วยคำสั่ง PowerShell แบบง่ายๆ
ตัวอย่างเช่น หากต้องการคัดลอกไฟล์ PDF ทั้งหมดของโฟลเดอร์ไปยังโฟลเดอร์สำรอง เพียงเปิด PowerShell ในโฟลเดอร์ที่มีไฟล์ PDF อยู่ และใช้คำสั่งนี้: *.pdf C:\Backup
ในทำนองเดียวกัน หากต้องการค้นหาไฟล์ทั้งหมดที่มีขนาดใหญ่กว่า 100MB ในโฟลเดอร์ใดโฟลเดอร์หนึ่ง ให้เปิด PowerShell ลงในโฟลเดอร์นั้น และใช้คำสั่งต่อไปนี้: Get-ChildItem-Recurse | โดยที่วัตถุ {$_.ความยาว-gt 100MB}
ต้องขอบคุณไวยากรณ์คำกริยา-คำนามของ PowerShell คำสั่งทั้งหมดจึงมีโครงสร้างเดียวกัน ใน Bash คุณจะต้องมีเครื่องมือและแฟล็กที่แตกต่างกันเพื่อจัดการไฟล์อย่างเหมาะสม
การรีโมตและระบบอัตโนมัติทำได้ง่าย
การทำงานข้ามหลายระบบโดยไม่มีการเสียดสี

จุดแข็งของ 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