Coding Gun

มารู้จักกับ Powershell

PowerShell เป็นทั้ง Environment และ Scripting language ที่พัฒนาโดย Microsoft เพื่อใช้ควบคุมระบบปฏิบัติการ Windows และในเวอร์ชันใหม่ยังรองรับ macOS และ Linux อีกด้วย

Powershell ถูกพัฒนาขึ้นจนกลายเป็น Scripting Language ที่ได้รับความนิยมภาษาหนึ่ง

คำสั่งใน Powershell จะอยู่ในรูปแบบเดียวกันคือ Verb-Noun ยกตัวอย่างเช่น Write-Output ใช้สำหรับการแสดงข้อความออกไปที่หน้าจอ แต่เพื่อการใช้งานที่ง่ายขึ้น Powershell จึงสร้าง Alias(ชื่อเล่น) ขึ้นมาแทนเช่น echo แทน Write-Output

Syntax ของ Powershell
รูปแบบคำสั่งบน Powershell

ตัวอย่างคำสั่งต่างๆใน Powershell มีดังนี้

Get-Process         # แสดงรายการโปรเซสทั้งหมด
Get-Service         # แสดงรายชื่อ Services ที่กำลังทำงานอยู่
Get-ChildItem       # แสดงรายการไฟล์และโฟลเดอร์ (เหมือนกับ dir และ ls)

การทำงานบน Powershell เป็น Case-Insensitive(ตัวใหญ่หรือตัวเล็กมีค่าเท่ากัน)

ข้อดีของ PowerShell

  1. Shell แบบ command-line interface (CLI) คล้ายกับ Command Prompt (cmd.exe) แต่มีความสามารถมากกว่า

  2. เป็นภาษา Scripting เขียนสคริปต์ (Script) เพื่อทำงานอัตโนมัติได้ เช่น การจัดการไฟล์, ควบคุมบริการ, ดึงข้อมูลระบบ, ควบคุม registry, จัดการ Active Directory, และอื่น ๆ

  3. ใช้ .NET Framework PowerShell สร้างขึ้นบน .NET (หรือ .NET Core ในเวอร์ชันใหม่) จึงสามารถเรียกใช้ class และ method ของ .NET ได้โดยตรง

  4. Object-oriented Powershell จะมองทุกอย่างเป็น Object ทั้งหมด ซึ่งจะต่างจาก Commnad Prompt ซึ่งจะมองทุกอย่างเป็น Text อย่างเดียว

  5. Object-based pipeline ข้อมูลที่ส่งผ่าน pipeline ไม่ใช่แค่ text แต่เป็น object ซึ่งทำให้การจัดการข้อมูลยืดหยุ่นและแม่นยำ

  6. Cross-platform PowerShell Core (PowerShell 6 ขึ้นไป) สามารถทำงานได้ทั้ง Windows, MacOS และ Linux

PowerShell ใช้ทำอะไรได้บ้าง?


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 หลังจากนั้นเราจะนำไฟล์ที่ได้ไปเรียกใช้งานด้วยขั้นตอนต่างๆ ดังนี้

  1. เปิด Powershell
  2. เข้าไปยัง Path ที่เก็บไฟล์ example.ps1 ยกตัวอย่างเช่น
    cd powershell-demo
    
  3. เรียกใช้งาน example.ps1
    .\example.ps1
    
    หรือใส่ Path เต็มๆ แบบนีก็ได้
    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 ด้วยขั้นตอนต่างๆ ดังนี้

  1. เปิด Powershell ด้วยสิทธิของ Admin(Run as Administrator)

  2. เปิด Powershell Execution Policy ด้วยคำสั่ง

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
    

    LocalMachine จะทำให้ Execution Policy ที่กำหนดมีผลกับทุก Users ที่อยู่ในเครื่องนี้

  3. ตรวจสอบ Execution Policy ด้วยคำสั่ง

    Get-ExecutionPolicy -List
    

    ผลลัพธ์ที่ได้จะเป็นคำว่า RemoteSigned

ใช้งาน Powershell Script ผ่านทาง Command Line(CMD)

ในกรณีที่เราต้องการเรียกใช้งาน Powershell Script ผ่านทาง Command Line เราต้องทำตามขั้นตอนต่างๆ ดังนี้

  1. เปิด Command Line(CMD)
  2. เรียกใช้งาน Powershell Script
    powershell.exe C:\powershell-demo\example.ps1
    

หวังว่าในบทความนี้จะทำให้เพื่อนๆเข้าใจการทำงานกับ Powershell มากขึ้น แล้วพบกันในบทความถัดไป

Phanupong Permpimol
Follow me