PowerShell = Command-line Shell + Scripting Language จาก Microsoft ใช้งานบน Windows, macOS, Linux ได้ (PowerShell 7+ Cross-platform) อ่านเข้าใจง่าย คล้ายภาษาอังกฤษ ไม่ได้เป็นโปรแกรมเมอร์ก็เรียนรู้ได้
ทำไมต้องเรียน PowerShell?
- Automate งานซ้ำ (Delete Temp Files, Rename Files จำนวนมาก, Backup, Report)
- จัดการ Windows ลึกกว่า GUI (Registry, Services, Scheduled Tasks, ACL, WMI/CIM)
- Remote Management หลายเครื่องพร้อมกัน
- ทักษะที่มีค่าในตลาดงาน IT/DevOps/SysAdmin
เริ่มต้น: PowerShell ISE (Integrated Scripting Environment)
- Start → พิมพ์ "powershell ise" → คลิกขวา → "Run as Administrator"
- ยอมรับ UAC (User Account Control)
- UI 3 ส่วน: (1) Script Pane (บน) เขียนโค้ด, (2) Console Pane (ล่าง) Output/Error, (3) Commands Pane (ขวา) ค้นหา Cmdlets
ตั้งค่า Execution Policy (ครั้งแรกเท่านั้น)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
RemoteSigned = รัน Script Local ได้เลย, Script จาก Internet ต้องมี Digital Signature
ตัวอย่างสคริปต์จริง: ลบไฟล์ Temporary Files อัตโนมัติ
$TempFileLocation = "C:\Users\$env:USERNAME\AppData\Local\Temp\*"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).Count
if ($TempFileCount -eq 0) {
Write-Host "No temporary files found in $TempFileLocation" -ForegroundColor Green
}
else {
$TempFile | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
Write-Host "Deleted $TempFileCount temporary files from $TempFileLocation" -ForegroundColor Green
}
อธิบายสคริปต์ทีละบรรทัด
| บรรทัด | คำอธิบาย |
|---|---|
$TempFileLocation = ... | ตัวแปร (Variable) เก็บ Path ไฟล์ Temp ($env:USERNAME = ชื่อผู้ใช้ปัจจุบัน) |
Get-ChildItem -Recurse | Cmdlet: ดึงรายการไฟล์/โฟลเดอร์ทั้งหมด (รวม Subfolders) → เก็บใน $TempFile |
$TempFileCount = ($TempFile).Count | นับจำนวนไฟล์ → เก็บใน $TempFileCount |
if ($TempFileCount -eq 0) | Condition: ถ้าไม่มีไฟล์ |
Write-Host ... -ForegroundColor Green | แสดงข้อความสีเขียว (ไม่ใช่ Error) |
else { ... } | ถ้ามีไฟล์ → ทำใน Block นี้ |
$TempFile | Remove-Item ... | Pipe (|) ส่ง Object ไปให้ Remove-Item ลบ -Force บังคับลบ, -Recurse ลบใน Subfolder, -ErrorAction SilentlyContinue ไม่แสดง Error |
Write-Host "Deleted $TempFileCount files..." | รายงานจำนวนไฟล์ที่ลบ |
วิธีใช้งานสคริปต์
- Copy โค้ดข้างต้น → วางใน Script Pane (บน)
- กด Ctrl+S บันทึกเป็น
Clean-TempFiles.ps1 - รัน: คลิกขวาไฟล์ .ps1 → "Run with PowerShell" หรือใน ISE กด F5 (ปุ่ม Play สีเขียว)
- สร้าง Scheduled Task (Task Scheduler) รันทุกวัน/สัปดาห์ อัตโนมัติ
แนวคิดพื้นฐานที่ควรจดจำ
- Cmdlet = Verb-Noun:
Get-ChildItem, Set-ExecutionPolicy, Remove-Item, Write-Host(ทายได้ว่าทำอะไร) - Variable = $Name: เริ่มต้นด้วย $ เสมอ
- Pipeline (|): ส่ง Output ของ Cmdlet ตัวก่อน → Input ของ Cmdlet ตัวหลัง
- Object-based: ไม่ใช่ Text Stream (เหมือน Bash) แต่เป็น .NET Object มี Properties/Methods
- Help System:
Get-Help Get-ChildItem -Examples/Get-Help about_*
แหล่งเรียนรู้ต่อไป
- Microsoft Learn: PowerShell Learning Path
- PowerShell Documentation:
Get-Helpภายใน Shell - "PowerShell in a Month of Lunches" (Book - Don Jones/Jeffery Hicks)
- YouTube: "PowerShell Tutorial" (TechSnips, Adam Bertram, Microsoft)
- Practice: เขียนสคริปต์แก้ปัญหาเล็กๆ น้อยๆ ทุกวัน
PowerShell ไม่ใช่เวทมนตร์ แต่มันคือ "คีย์" ที่ปลดล็อกความสามารถของ Windows ให้คุณควบคุมได้จริง เริ่มจากสคริปต์เล็กๆ อย่างนี้ แล้วค่อยขยายไปเรื่อยๆ