มารู้จักกับ Powershell
PowerShell เป็นทั้ง Environment และ Scripting language ที่พัฒนาโดย Microsoft เพื่อใช้ควบคุมระบบปฏิบัติการ Windows และในเวอร์ชันใหม่ยังรองรับ macOS และ Linux อีกด้วย
Powershell ถูกพัฒนาขึ้นจนกลายเป็น Scripting Language ที่ได้รับความนิยมภาษาหนึ่ง
คำสั่งใน Powershell จะอยู่ในรูปแบบเดียวกันคือ Verb-Noun ยกตัวอย่างเช่น Write-Output ใช้สำหรับการแสดงข้อความออกไปที่หน้าจอ แต่เพื่อการใช้งานที่ง่ายขึ้น Powershell จึงสร้าง Alias(ชื่อเล่น) ขึ้นมาแทนเช่น echo แทน Write-Output
ตัวอย่างคำสั่งต่างๆใน Powershell มีดังนี้
Get-Process # แสดงรายการโปรเซสทั้งหมด
Get-Service # แสดงรายชื่อ Services ที่กำลังทำงานอยู่
Get-ChildItem # แสดงรายการไฟล์และโฟลเดอร์ (เหมือนกับ dir และ ls)
การทำงานบน Powershell เป็น Case-Insensitive(ตัวใหญ่หรือตัวเล็กมีค่าเท่ากัน)
ข้อดีของ PowerShell
-
Shell แบบ command-line interface (CLI) คล้ายกับ Command Prompt (cmd.exe) แต่มีความสามารถมากกว่า
-
เป็นภาษา Scripting เขียนสคริปต์ (Script) เพื่อทำงานอัตโนมัติได้ เช่น การจัดการไฟล์, ควบคุมบริการ, ดึงข้อมูลระบบ, ควบคุม registry, จัดการ Active Directory, และอื่น ๆ
-
ใช้ .NET Framework PowerShell สร้างขึ้นบน .NET (หรือ .NET Core ในเวอร์ชันใหม่) จึงสามารถเรียกใช้ class และ method ของ .NET ได้โดยตรง
-
Object-oriented Powershell จะมองทุกอย่างเป็น Object ทั้งหมด ซึ่งจะต่างจาก Commnad Prompt ซึ่งจะมองทุกอย่างเป็น Text อย่างเดียว
-
Object-based pipeline ข้อมูลที่ส่งผ่าน pipeline ไม่ใช่แค่ text แต่เป็น object ซึ่งทำให้การจัดการข้อมูลยืดหยุ่นและแม่นยำ
-
Cross-platform PowerShell Core (PowerShell 6 ขึ้นไป) สามารถทำงานได้ทั้ง Windows, MacOS และ Linux
PowerShell ใช้ทำอะไรได้บ้าง?
- เขียนสคริปต์อัตโนมัติสำหรับผู้ดูแลระบบ (SysAdmin)
- จัดการระบบ Windows หรือเซิร์ฟเวอร์แบบ remote
- สร้าง tool สำหรับ DevOps
- ทำงานซ้ำๆ เช่น backup, cleanup, report โดยอัตโนมัติ
Powershell vs CMD
ทั้ง Powershell และ CMD หรือ Command Prompt ต่างก็เป็นโปรแกรมที่รอรับคำสั่งที่เราส่งเข้าไป(Shell) ซึ่งคำสั่งที่ใช้งานทั้งใน Powershell และ Command Prompt จะแตกกต่างกัน โดยที่ Powershell จะมี Alias(ชื่อเล่น) ให้เราใช้คำสั่งเหมือนกับ Shell บน Linux ได้ นั่นเลยทำให้ผู้ใช้งานที่ต้องใช้ทั้ง Linux และ Windows จะชอบ Powershell มากกว่า Command Prompt ซึ่งเราสามารถเปรียบเทียบความแตกต่างของ Powershell และ Command Prompt ได้ดังตารางนี้
การเปรียบเทียบระหว่าง PowerShell และ Command Prompt (cmd.exe) สามารถสรุปได้ตามตารางด้านล่างนี้ เพื่อให้เห็นความแตกต่างที่ชัดเจน:
หัวข้อ | PowerShell | Command Prompt (CMD) |
---|---|---|
ประเภท | Shell และ Scripting Language | Shell พื้นฐาน |
รูปแบบข้อมูล | ใช้ Object (จาก .NET) | ใช้ ข้อความ (Text) |
Programming Language | มีตัวแปร, loop, if, function ฯลฯ | ไม่มีโครงสร้างภาษาแบบ programming |
Pipeline | รองรับแบบ object-based (ยืดหยุ่นมาก) | รองรับ text-based (จำกัด) |
.NET Framework | ได้เต็มรูปแบบ | ไม่ได้ |
Cross-platform | ใช่ (ตั้งแต่ PowerShell Core ขึ้นไป) | ไม่ (ทำงานได้แค่บน Windows) |
เหมาะกับใคร | นักพัฒนา, ผู้ดูแลระบบ, DevOps | ผู้ใช้งานทั่วไป หรือสำหรับงานง่าย ๆ |
Pipeline คือการใช้ Pipe Operator “|” เพื่อบอกให้ส่ง Output ของคำสั่งก่อนหน้าเข้าไปเป็น Input ของ คำสั่งต่อไป
ตัวอย่าง Pipeline แบบ Object ใน Powershell
Get-Process | Where-Object { $_.CPU -gt 100 } | Sort-Object CPU -Descending
ตัวอย่างคำสั่งใน Command Prompt และ Powershell
งานที่ต้องการทำ | Command Prompt | PowerShell |
---|---|---|
ดูรายการไฟล์ในโฟลเดอร์ | dir |
Get-ChildItem หรือ ls |
คัดลอกไฟล์ | copy file1.txt file2.txt |
Copy-Item file1.txt file2.txt |
ปิดโปรเซส | taskkill /PID 1234 |
Stop-Process -Id 1234 |
ตรวจสอบ services | ไม่มี | Get-Service |
ตัวอย่างการใช้งาน PowerShell
ในการใช้งาน Powershell เราต้องทำความเข้าใจ Syntax ต่างๆดังนี้
การประกาศตัวแปร
ในกรณีที่เราต้องการใช้งานตัวแปรเราจะประกาศตัวแปรขึ้นมาใช้งาน โดยใช้เครื่องหมาย $ นำหน้า
$variableName = "value"
ตัวอย่างการใช้งานตัวแปร
# ประการตัวแปรแบบ String
$message = "Hello, PowerShell!"
# ประกาศตัวแปรแบบ Integer
$number = 123
# ประกาศตัวแปรแบบ Boolean
$isTrue = $true
การเปรียบเทียบ(Comparison)
ใน Powershell จะใช้เครื่องหมายเพื่อเปรียบเทียบตามตารางนี้
เครื่องหมาย | ความหมาย |
---|---|
-gt | มากกว่า |
-ge | มากกว่าหรือเท่ากับ |
-lt | น้อยกว่า |
-le | น้อยกว่าหรือเท่ากับ |
-eq | เท่ากับ |
-ne | ไม่เท่ากับ |
การวน Loop
ในการเขียน Script เมื่อเราต้องทำงานซ้ำๆ เราจะใช้้ Loop ซึ่งมี Syntax ต่างๆดังนี้
For loop
เราจะใช้ For Loop ด้วยรูปแบบ ดังนี้
for ($i = 1; $i -le 5; $i++) {
Write-Host "Current iteration: $i"
}
Foreach Loop
เราสามารถวน Loop สมาชิกใน Array ได้ด้วย Foreach แบบนี้
$fruits = "Apple", "Banana", "Orange"
foreach ($fruit in $fruits) {
echo "I like $fruit"
}
While Loop
เราสามารถใช้ While Loop ด้วยรูปแบบ ดังนี้
$count = 0
while ($count -lt 3) {
Write-Host "Count is: $count"
$count++
}
Do-While Loop
นอกจากนี้ใน Powershell ยังมี Do-While Loop ให้เลือกใช้งาน โดยมีรูปแบบดังนี้
$input = ""
do {
$input = Read-Host "Enter 'exit' to quit"
} while ($input -ne "exit")
ในตัวอย่างนี้ Script จะรับ Input ไปเรื่อยๆจนกว่าจะพิมพิ์คำว่า exit
การสร้างเงื่อนไข If-Else
เช่นเดียวกับภาษาอื่นๆ Powershell สามารถสร้างเงื่อนไขได้ด้วย Syntax แบบนี้
If (condition) {
# Code to execute if the condition is true
} Else {
# Code to execute if the condition is false
}
ยกตัวอย่างเช่น
$number = 10
If ($number -gt 5) {
echo "The number is greater than 5."
} Else {
echo "The number is not greater than 5."
}
ใช้งานแบบสคริปต์(Execute Powershell Script)
เราสามารถเขียน Script บน Powershell โดยสร้างไฟล์ที่มีนามสกุลเป็น .ps1 ยกตัวอย่างเช่น ถ้าเราต้องการวน Loop เพื่อดึงเรารายชื่อไฟล์ใน Folder ที่ชื่อ MyFolder ใน Drive C เราจะเขียน Script แบบนี้
$files = Get-ChildItem -Path "C:\MyFolder"
foreach ($file in $files) {
Write-Output $file.Name
}
แล้ว Save ไฟล์ชื่อว่า example.ps1
หลังจากนั้นเราจะนำไฟล์ที่ได้ไปเรียกใช้งานด้วยขั้นตอนต่างๆ ดังนี้
- เปิด Powershell
- เข้าไปยัง Path ที่เก็บไฟล์
example.ps1
ยกตัวอย่างเช่นcd powershell-demo
- เรียกใช้งาน
example.ps1
หรือใส่ Path เต็มๆ แบบนีก็ได้.\example.ps1
C:\powershell-demo\example.ps1
Powershell Execution Policy
ถ้าเกิด Error ขึ้นว่า C:\powershell-demo\example.ps1 cannott be loaded because running scripts is disabled on this system
แสดงว่าใน Powershell ของเราได้ป้องกันการ Run Powershell script ด้วย Excution Policy ดังนั้นให้เราทำการแก้ไขด้วยการอนุญาติให้ใช้งาน Powershell Script ด้วยขั้นตอนต่างๆ ดังนี้
-
เปิด Powershell ด้วยสิทธิของ Admin(Run as Administrator)
-
เปิด Powershell Execution Policy ด้วยคำสั่ง
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
LocalMachine
จะทำให้ Execution Policy ที่กำหนดมีผลกับทุก Users ที่อยู่ในเครื่องนี้ -
ตรวจสอบ Execution Policy ด้วยคำสั่ง
Get-ExecutionPolicy -List
ผลลัพธ์ที่ได้จะเป็นคำว่า
RemoteSigned
ใช้งาน Powershell Script ผ่านทาง Command Line(CMD)
ในกรณีที่เราต้องการเรียกใช้งาน Powershell Script ผ่านทาง Command Line เราต้องทำตามขั้นตอนต่างๆ ดังนี้
- เปิด Command Line(CMD)
- เรียกใช้งาน Powershell Script
powershell.exe C:\powershell-demo\example.ps1
หวังว่าในบทความนี้จะทำให้เพื่อนๆเข้าใจการทำงานกับ Powershell มากขึ้น แล้วพบกันในบทความถัดไป