PowerShell คืออะไร? เจาะลึกเชลล์ที่แข็งแกร่งที่สุดที่ผู้ใช้ Windows ทุกคนต้องมี
ในซีรีส์แนะนำ Bash ที่ผ่านมา เราได้เน้นไปที่ Bash shell ซึ่งเป็นมาตรฐานใน macOS และ Linux แต่สำหรับนักสร้างสรรค์เว็บหลายคนคงรู้สึกว่า "แต่เราใช้ Windows เป็นหลักนี่นา..." ไม่ต้องกังวลครับ! ใน Windows มี เชลล์ที่ทรงพลังอย่างยิ่ง ติดตั้งมาเป็นมาตรฐาน ซึ่งเหนือกว่า Command Prompt (จอสีดำ) แบบเก่าอย่างเทียบไม่ติด นั่นก็คือ PowerShell ที่เราจะมาแนะนำกันในวันนี้
PowerShell ไม่ใช่แค่เครื่องมือสำหรับรันคำสั่งธรรมดาๆ แต่มันเปรียบเสมือน "ไม้กายสิทธิ์" ที่สามารถทำให้การตั้งค่าต่างๆ ของ Windows เป็นอัตโนมัติ และจัดการกับงานที่ซับซ้อนได้ด้วยโค้ดเพียงไม่กี่บรรทัด โดยเฉพาะอย่างยิ่งในการจัดการเซิร์ฟเวอร์เพื่องานพัฒนาเว็บ หรือการเพิ่มประสิทธิภาพการทำงานในแต่ละวัน พลังของมันมหาศาลมากครับ
ในบทความนี้ เราจะมาตอบคำถามสำหรับมือใหม่เช่น "PowerShell คืออะไร?" "มันต่างจาก Command Prompt อย่างไร?" พร้อมทั้งอธิบายวิธีใช้งานพื้นฐานและเสน่ห์ของมัน ด้วยตัวอย่างที่สามารถคัดลอกไปลองใช้งานได้ทันที ผู้ใช้ Windows ทุกคนมีอาวุธที่แข็งแกร่งที่สุดนี้อยู่ในมือแล้ว วันนี้เรามาลองใช้งานมันให้คล่องกันดีไหมครับ?
ตัวตนของ PowerShell - เชลล์ที่แข็งแกร่งที่สุดจาก Windows
PowerShell คือ Command-line shell และภาษาสคริปต์ที่ Microsoft พัฒนาขึ้นมาโดยเฉพาะเพื่อการจัดการและทำงานอัตโนมัติบน Windows หากเปรียบเทียบ Command Prompt แบบเก่าเป็นเครื่องคิดเลข PowerShell ก็เปรียบได้กับโปรแกรม Excel ทั้งสองอย่างสามารถคำนวณได้เหมือนกัน แต่ชนิดของข้อมูลที่จัดการได้และความกว้างของสิ่งที่ทำได้นั้นแตกต่างกันอย่างสิ้นเชิง
ความแตกต่างที่ใหญ่ที่สุดคือการจัดการ "อ็อบเจกต์"
ความแตกต่างที่ชัดเจนที่สุดระหว่าง Command Prompt และ PowerShell อยู่ที่ "รูปแบบ" ของข้อมูลที่คำสั่งส่งคืนกลับมา
- Command Prompt (cmd.exe): จะส่งคืนผลลัพธ์ของคำสั่งเป็นเพียง "ข้อความ (text)" ธรรมดาๆ ซึ่งเหมาะสำหรับให้คนอ่าน แต่การจะดึงเอาเฉพาะ "ชื่อไฟล์" หรือ "ขนาด" จากข้อความนั้นมาใช้ในกระบวนการถัดไปเป็นเรื่องที่ยากมาก
- PowerShell: จะส่งคืนผลลัพธ์ของคำสั่งเป็น "อ็อบเจกต์ (object)" ซึ่งเป็นข้อมูลที่มีโครงสร้าง ในอ็อบเจกต์จะมี "คุณสมบัติ (property)" ต่างๆ เช่น ชื่อไฟล์, ขนาด, วันที่แก้ไขล่าสุด ผูกติดอยู่ ทำให้เราสามารถดึงข้อมูลเฉพาะส่วน, เรียงลำดับ, หรือกรองข้อมูลได้อย่างง่ายดาย เหมือนกับเซลล์ใน Excel
คุณสมบัติ "การจัดการอ็อบเจกต์" นี่เองที่ยกระดับ PowerShell จากเครื่องมือ command-line ธรรมดาให้กลายเป็นแพลตฟอร์มสำหรับระบบอัตโนมัติที่ทรงพลัง
สัมผัสพลังของ PowerShell! ควบคุมอ็อบเจกต์ด้วยไปป์ไลน์
การได้ลองใช้งานจริงย่อมดีกว่าการฟังคำอธิบาย คุณค่าที่แท้จริงของ PowerShell จะแสดงออกมาเมื่อเราเชื่อมต่อคำสั่งต่างๆ ด้วย "ไปป์ไลน์ |" มาดูกันว่าอ็อบเจกต์ถูกส่งต่อไปยังคำสั่งถัดไปเหมือนสายพานในโรงงานเพื่อแปรรูปได้อย่างไร
ก่อนอื่น เรามาใช้คำสั่ง Get-Process เพื่อดึงรายการโปรเซสที่กำลังทำงานอยู่บนคอมพิวเตอร์ จุดเด่นของคำสั่งใน PowerShell คือมีรูปแบบที่เข้าใจง่ายแบบ กริยา-คำนาม
Get-Process
มีโปรเซสจำนวนมากแสดงขึ้นมาในรูปแบบตารางใช่ไหมครับ นี่แหละคือกลุ่มของอ็อบเจกต์
ต่อไป เราจะส่งผลลัพธ์นี้ผ่านไปป์ไปยัง Where-Object เพื่อกรองเอาเฉพาะ "โปรเซสที่มีชื่อ (ProcessName) เป็น 'chrome'" เท่านั้น $_ จะหมายถึงอ็อบเจกต์แต่ละตัวที่ถูกส่งผ่านมาทางไปป์
Get-Process | Where-Object { $_.ProcessName -eq 'chrome' }
จะเห็นว่ามีเพียงโปรเซสที่เกี่ยวข้องกับ Chrome เท่านั้นที่แสดงขึ้นมา เพราะมันไม่ใชแค่ข้อความแต่เป็นอ็อบเจกต์ เราจึงสามารถระบุคุณสมบัติอย่าง ProcessName เพื่อกรองข้อมูลได้อย่างง่ายดาย
จากนั้น เรามาส่งผลลัพธ์ที่กรองแล้วไปยัง Sort-Object เพื่อเรียงลำดับตามปริมาณการใช้หน่วยความจำ (WS) จากมากไปน้อย
Get-Process | Where-Object { $_.ProcessName -eq 'chrome' } | Sort-Object -Property WS -Descending
เพียงแค่เชื่อมต่อคำสั่งไปเรื่อยๆ เราก็สามารถดึงและแปรรูปข้อมูลที่ซับซ้อนได้ราวกับกำลังจัดการฐานข้อมูล นี่แหละคือพลังของ PowerShell
มาลองใช้คำสั่งพื้นฐาน (Cmdlet) กันเถอะ
คำสั่งใน PowerShell มีชื่อเรียกอย่างเป็นทางการว่า Cmdlet (คอมมานด์เล็ต) ในส่วนนี้ เราจะแนะนำวิธีการทำงานที่คุ้นเคยจาก Bash หรือ Command Prompt ด้วย Cmdlet ของ PowerShell Cmdlet หลายตัวมี "alias (ชื่อเล่น)" สั้นๆ เตรียมไว้ให้ ทำให้คุณสามารถใช้คำสั่งที่คุ้นเคยอย่าง ls หรือ cd ได้เลย
การย้ายตำแหน่ง (pwd, cd, sl)
ใช้ Get-Location เพื่อตรวจสอบตำแหน่งปัจจุบัน และ Set-Location เพื่อย้ายตำแหน่ง
# แสดงตำแหน่งปัจจุบัน (alias: pwd)
Get-Location
# ย้ายไปยังไดเรกทอรี C:\Users (alias: cd, sl)
Set-Location C:\Users
การแสดงรายการ (ls, dir, gci)
ใช้ Get-ChildItem เพื่อแสดงรายการไฟล์และโฟลเดอร์
# แสดงเนื้อหาของไดเรกทอรีปัจจุบัน (alias: ls, dir, gci)
Get-ChildItem
เราสามารถใช้ประโยชน์จากอ็อบเจกต์เพื่อค้นหาไฟล์ประเภทที่ต้องการแบบวนซ้ำ (หาในโฟลเดอร์ย่อยทั้งหมด) ได้อย่างง่ายดาย
# ค้นหาไฟล์ .css ทั้งหมดตั้งแต่ตำแหน่งปัจจุบันลงไป
Get-ChildItem -Recurse -Filter "*.css"
การสร้างไฟล์และโฟลเดอร์ (ni)
ใช้ New-Item เพื่อสร้างรายการใหม่ (ไฟล์หรือโฟลเดอร์)
การสร้างไฟล์:
New-Item -Path ".\new-file.txt" -ItemType File
การสร้างโฟลเดอร์:
New-Item -Path ".\new-folder" -ItemType Directory
การอ่านและเขียนเนื้อหาไฟล์ (cat, gc, sc)
ใช้ Get-Content เพื่ออ่านเนื้อหาไฟล์ และ Set-Content เพื่อเขียน
การเขียนลงไฟล์:
"Hello from PowerShell!" | Set-Content -Path ".\new-file.txt"
การอ่านเนื้อหาไฟล์ (alias: cat, gc):
Get-Content -Path ".\new-file.txt"
การลบไฟล์และโฟลเดอร์ (rm, del, rmdir)
ใช้ Remove-Item เพื่อลบไฟล์และโฟลเดอร์ การดำเนินการนี้ไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังอย่างยิ่งในการรัน
Remove-Item -Path ".\new-file.txt"
หากต้องการลบโฟลเดอร์พร้อมกับเนื้อหาทั้งหมด ต้องใช้ตัวเลือก -Recurse
Remove-Item -Path ".\new-folder" -Recurse
สรุป
ครั้งนี้ เราได้นำเสนอทางเข้าสู่โลกของ PowerShell ซึ่งเป็นเชลล์ที่ทรงพลังที่ติดตั้งมาพร้อมกับ Windows ในตอนแรกคุณอาจจะสับสนกับ Cmdlet ที่ไม่คุ้นเคย แต่เมื่อเข้าใจแก่นแท้ของมันแล้ว ก็ไม่มีเครื่องมือใดที่น่าเชื่อถือไปกว่านี้อีกแล้ว
- PowerShell จัดการกับ อ็อบเจกต์ ไม่ใช่แค่ข้อความธรรมดา
- รูปแบบ
กริยา-คำนามของ Cmdlet มีความสอดคล้องกันและง่ายต่อการเรียนรู้ - การเชื่อมต่ออ็อบเจกต์ด้วย ไปป์ไลน์ ช่วยให้สามารถประมวลผลข้อมูลขั้นสูงได้อย่างเป็นธรรมชาติ
ในงานสร้างเว็บ เป็นเรื่องปกติที่จะทำงานบนสภาพแวดล้อม Windows ในเครื่อง local แล้ว deploy ไปยังเซิร์ฟเวอร์ Linux ที่เป็น production หากคุณสามารถใช้ PowerShell เพื่อทำงานอัตโนมัติและเพิ่มประสิทธิภาพบน Windows และยังสามารถจัดการสภาพแวดล้อม Linux ได้อย่างราบรื่นผ่าน WSL ก็จะเหมือนกับเสือติดปีกเลยทีเดียว
หวังว่าบทความในวันนี้จะทำให้คุณได้สัมผัสถึงเสน่ห์และพลังของ PowerShell บ้างไม่มากก็น้อย ในบทความหน้า เราจะมาอธิบายวิธีการอัปเดต PowerShell นี้ให้เป็นเวอร์ชันล่าสุด รวมถึงขั้นตอนการติดตั้งบน macOS/Linux
[สำหรับมือใหม่] วิธีติดตั้งและเปิดใช้งาน PowerShell (Windows / Mac / Linux)