PowerShell มีคุณสมบัติมากมายสำหรับจัดการกระบวนการ (Processes) บนคอมพิวเตอร์ท้องถิ่นหรือระยะไกล โดยใช้ PowerShell คุณสามารถรับรายการกระบวนการที่กำลังทำงาน หยุดกระบวนการที่ค้างชั่วคราว ค้นหากระบวนการจาก tiêu đềหน้าต่าง รันกระบวนการใหม่ในโหมดซ่อนหรือโต้ตอบ เป็นต้น
คุณสามารถแสดงรายการ cmdlet การจัดการกระบวนการที่มีอยู่ใน Windows 10 ได้ดังนี้:
Get-Command –Noun Process

- Get-Process – รับรายการกระบวนการ Windows ที่กำลังทำงาน;
- Start-Process – เริ่มกระบวนการ/โปรแกรม;
- Stop-Process – หยุด (Kill) กระบวนการบังคับ;
- Debug-Process – ดีบักกระบวนการ;
- Wait-Process – รอจนกระบวนการสิ้นสุด
Get-Process: รับรายการกระบวนการที่กำลังทำงาน
Cmdlet Get-Process แสดงรายการกระบวนการที่กำลังทำงานบนคอมพิวเตอร์ท้องถิ่น

โดยค่าเริ่มต้น คุณสมบัติเหล่านี้ของกระบวนการที่กำลังทำงานจะถูกแสดง:
- Handles – จำนวนตัวจัดการไฟล์ I/O (handles) ที่กระบวนการนี้เปิดอยู่;
- NPM(K) – คือหน่วยความจำที่ไม่ถูกแบ่งหน้า (non-paged pool) นี่คือขนาดข้อมูลกระบวนการ (ใน KB) ที่ไม่เคยถูกแบ่งหน้าลงดิสก์;
- PM(K) – ขนาดหน่วยความจำของกระบวนการที่อาจถูกแบ่งหน้า;
- WS(K) – ขนาดหน่วยความจำทางกายภาพ (ใน KB) ที่กระบวนการใช้ (Working Set);
- CPU(s) – เวลา CPU ที่กระบวนการใช้ (นับเวลาบน CPU ทั้งหมด);
- ID – ตัวระบุกระบวนการที่ไม่ซ้ำกัน;
- SI (Session ID) – คือ ID เซสชันของกระบวนการ (0 หมายถึงรันสำหรับทุกเซสชัน, 1 – รันสำหรับผู้ใช้ที่เข้าสู่ระบบคนแรก, 2 – รันสำหรับคนที่สอง เป็นต้น);
- ProcessName
เพื่อแสดงรายการคุณสมบัติทั้งหมดของหลายกระบวนการ:
Get-Process cmd,excel,notep* | Format-List *
คุณสามารถแสดงคุณสมบัติเฉพาะของกระบวนการได้ เช่น ชื่อ (ProcessName), เวลาเริ่มต้น (StartTime), ชื่อเรื่องหน้าต่างกระบวนการ (MainWindowTitle), ชื่อไฟล์นำออกไป (Path) และชื่อนักพัฒนา (Company):
Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft

เพื่อแสดงรายการกระบวนการผู้ใช้ที่กำลังทำงานพร้อม GUI (กระบวนการพื้นหลังและระบบจะไม่แสดง):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle

โดยใช้ตัวเลือก IncludeUserName คุณสามารถแสดงชื่อผู้ใช้ (เจ้าของ) ที่เริ่มกระบวนการ:
Get-Process -Name winword -IncludeUserName
โดยใช้ Where-Object คุณสามารถเลือกกระบวนการตามเกณฑ์บางอย่าง เช่น แสดงกระบวนการทั้งหมดที่ใช้ RAM มากกว่า 300 MB เรียงลำดับตามการใช้หน่วยความจำจากมากไปน้อย และแสดงขนาดหน่วยความจำเป็น MB แทน KB:
Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending

как мы говорили ранее, cmdlet Get-Process ในพารามิเตอร์ CPU มีเวลาประมวลผลที่ใช้โดยกระบวนการเฉพาะในวินาที เพื่อแสดงเปอร์เซ็นต์ CPU ที่ใช้โดยกระบวนการ (คล้าย Task Manager) ให้ใช้ฟังก์ชันนี้:
function Get-CPUUsagePercent
{
$CPUPercent = @{
Name = 'CPUPercent'
Expression = {
$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
}
}
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
}
Get-CPUUsagePercent

เพื่อค้นหากระบวนการที่ค้าง (ไม่ตอบสนอง) ให้รันคำสั่งต่อไปนี้:
Get-Process | where-object {$_.Responding -eq $false}
Start-Process, Stop-Process: วิธีเริ่มหรือหยุดกระบวนการด้วย PowerShell
เพื่อเริ่มกระบวนการใหม่โดยใช้ PowerShell ใช้คำสั่งนี้:
Start-Process -FilePath notepad
หากไม่มีไฟล์นำออกไปในตัวแปรสภาพแวดล้อม $env:path ให้ระบุเส้นทางเต็มไปยังไฟล์:
Start-Process -FilePath 'C:\distr\app.exe'
คุณสามารถรันโปรแกรมและส่งอาร์กิวเมนต์ไปด้วย:
Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"
โดยใช้ตัวเลือก WindowStyle คุณสามารถตั้งค่าโหมดเริ่มต้นหน้าต่างกระบวนการ (ปกติ, ย่อ, ขยาย, ซ่อน) เช่น เพื่อรันโปรแกรมในหน้าต่างขยายเต็มจอและรอจนกระบวนการสิ้นสุด ให้รันคำสั่งนี้:
Start-Process -FilePath tracert -ArgumentList "10.1.56.21" –wait -windowstyle Maximized
โดยใช้ Stop-Process cmdlet คุณสามารถหยุดกระบวนการใดๆ ได้ ตัวอย่างเช่น เพื่อปิดกระบวนการ notepad ทั้งหมดที่กำลังทำงาน:
Stop-Process -Name notepad
โดยค่าเริ่มต้น คุณจะไม่ได้รับแจ้งยืนยันการหยุดกระบวนการ กระบวนการทั้งหมดที่ตรงตามเกณฑ์ที่ระบุจะถูกหยุด เพื่อให้สามารถยืนยันการหยุดกระบวนการ ให้เพิ่มตัวเลือก –Confirm:
Stop-Process -Name notepad.exe -Confirm

นอกจากนี้ คุณสามารถ Kill กระบวนการได้ดังนี้:
(Get-Process -Name cmd).Kill()
จาก PowerShell คุณสามารถบังคับหยุดแอปทั้งหมดที่ไม่ตอบสนอง Windows Process Manager:
Get-Process | where-object {$_.Responding -eq $false}| Stop-Process
โดยใช้ PowerShell คุณสามารถรีสตาร์ทกระบวนการที่ค้างหรือปิดอัตโนมัติได้
จัดการกระบวนการบนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell
คุณสามารถใช้ตัวเลือก ComputerName ของ Get-Process cmdlet เพื่อจัดการกระบวนการบนคอมพิวเตอร์ระยะไกล (WinRM ต้องเปิดใช้งานและกำหนดค่า)
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName
เราใช้คุณสมบัติ Get-Process ในตัวจัดการกระบวนการบนคอมพิวเตอร์ระยะไกล ฟีเจอร์ PowerShell Remoting ที่มีอยู่ใน cmdlet Invoke-Command และ Enter-PSSession ไม่ได้กล่าวถึงที่นี่
หากคุณต้องการ Kill กระบวนการบนคอมพิวเตอร์ระยะไกล โปรดทราบว่า Stop-Process cmdlet ไม่มีพารามิเตอร์ –ComputerName หากต้องการหยุดกระบวนการบนคอมพิวเตอร์ระยะไกล คุณสามารถใช้โค้ด PowerShell ต่อไปนี้:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess