PowerShell มีคุณสมบัติมากมายในการจัดการกระบวนการบนคอมพิวเตอร์ในพื้นที่หรือคอมพิวเตอร์ระยะไกล เมื่อใช้ PowerShell คุณจะได้รับรายการกระบวนการที่กำลังทำงาน ระงับกระบวนการที่หยุดทำงาน ค้นหากระบวนการโดยใช้ชื่อหน้าต่าง เรียกใช้กระบวนการใหม่ในโหมดซ่อนเร้นหรือโหมดโต้ตอบ ฯลฯ
คุณสามารถแสดงรายการ cmdlet ของการจัดการกระบวนการที่พร้อมใช้งานใน Windows 10 ได้ดังนี้:
Get-Command –Noun Process
- รับกระบวนการ – รับรายการกระบวนการของ Windows ที่ทำงานอยู่
- เริ่มกระบวนการ – เริ่มกระบวนการ/โปรแกรม
- หยุดกระบวนการ – บังคับหยุด (ฆ่า) กระบวนการ
- ดีบัก-โพรเซส – ดีบักกระบวนการ
- รอดำเนินการ – รอจนกว่ากระบวนการจะสิ้นสุดลง
รับกระบวนการ:รับรายการกระบวนการที่ทำงานอยู่
Get-Process cmdlet แสดงรายการกระบวนการที่ทำงานอยู่บนเครื่องคอมพิวเตอร์
โดยค่าเริ่มต้น คุณสมบัติเหล่านี้ของกระบวนการที่ทำงานอยู่จะปรากฏขึ้น:
- ด้ามจับ – จำนวนตัวอธิบายไฟล์อินพุต-เอาต์พุต (แฮนเดิล) ที่เปิดโดยกระบวนการนี้
- NPM(K) – เป็นหน่วยความจำแบบ non-paged (พูลแบบ non-paged) นี่คือขนาดของข้อมูลกระบวนการ (เป็น KB) ที่ไม่มีการเพจบนดิสก์
- PM(K) – ขนาดของหน่วยความจำกระบวนการที่อาจถูกเพจ
- WS(K) – ขนาดของหน่วยความจำกายภาพ (เป็น KB) ที่ใช้โดยกระบวนการ (Working Set)
- ซีพียู – เวลา CPU ที่ใช้โดยกระบวนการ (นับเวลาของ CPU ทั้งหมด);
- รหัส – ตัวระบุกระบวนการเฉพาะ
- SI (ID เซสชัน) – คือ ID เซสชันของกระบวนการ (0 หมายถึงเรียกใช้สำหรับเซสชันทั้งหมด, 1- เรียกใช้สำหรับผู้ใช้ที่เข้าสู่ระบบครั้งแรก, 2 — เรียกใช้สำหรับผู้ใช้ที่เข้าสู่ระบบครั้งที่สอง เป็นต้น)
- ชื่อกระบวนการ
ในการแสดงรายการคุณสมบัติทั้งหมดของหลายกระบวนการ:
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
การใช้ รวมชื่อผู้ใช้ ตัวเลือก คุณสามารถแสดงชื่อผู้ใช้ (เจ้าของ) ที่เริ่มกระบวนการ:
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 คุณสามารถหยุดกระบวนการใดก็ได้ ตัวอย่างเช่น ในการปิดกระบวนการแผ่นจดบันทึกที่ทำงานอยู่ทั้งหมด:
Stop-Process -Name notepad
โดยค่าเริ่มต้น คุณจะไม่ได้รับพร้อมท์ให้ยืนยันการฆ่ากระบวนการ กระบวนการทั้งหมดที่ตรงตามเกณฑ์ที่กำหนดจะหยุดลง หากต้องการยืนยันกระบวนการหยุด ให้เพิ่ม –ยืนยัน ตัวเลือก:
Stop-Process -Name notepad.exe -Confirm
นอกจากนี้ คุณสามารถฆ่ากระบวนการได้ดังนี้:
(Get-Process -Name cmd).Kill()
จาก PowerShell คุณสามารถบังคับหยุดแอปทั้งหมดที่ไม่ตอบสนองต่อ Windows Process Manager:
Get-Process | where-object {$_.Responding -eq $false}| Stop-Process
จัดการกระบวนการบนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell
คุณสามารถใช้ ComputerName
ตัวเลือกของ Get-Process cmdlet เพื่อจัดการกระบวนการบนคอมพิวเตอร์ระยะไกล (ต้องเปิดใช้งานและกำหนดค่า WinRM)
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName
Invoke-Command
และ Enter-PSSession
cmdlets จะไม่ครอบคลุมที่นี่ ถ้าคุณต้องการฆ่ากระบวนการบนคอมพิวเตอร์ระยะไกล โปรดทราบว่า cmdlet Stop-Process ไม่มีพารามิเตอร์ –ComputerName หากต้องการหยุดกระบวนการบนคอมพิวเตอร์ระยะไกล คุณสามารถใช้รหัส PowerShell ต่อไปนี้:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess