Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การจัดการกระบวนการ Windows ด้วย PowerShell

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

คุณสามารถแสดงรายการ cmdlet การจัดการกระบวนการที่มีอยู่ใน Windows 10 ได้ดังนี้:

Get-Command –Noun Process

การจัดการกระบวนการ Windows ด้วย PowerShell

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

Get-Process: รับรายการกระบวนการที่กำลังทำงาน

Cmdlet Get-Process แสดงรายการกระบวนการที่กำลังทำงานบนคอมพิวเตอร์ท้องถิ่น

การจัดการกระบวนการ Windows ด้วย PowerShell

โดยค่าเริ่มต้น คุณสมบัติเหล่านี้ของกระบวนการที่กำลังทำงานจะถูกแสดง:

  • 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

การจัดการกระบวนการ Windows ด้วย PowerShell

เพื่อแสดงรายการกระบวนการผู้ใช้ที่กำลังทำงานพร้อม GUI (กระบวนการพื้นหลังและระบบจะไม่แสดง):

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle

การจัดการกระบวนการ Windows ด้วย PowerShell

โดยใช้ตัวเลือก 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

การจัดการกระบวนการ Windows ด้วย PowerShell

как мы говорили ранее, 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

การจัดการกระบวนการ Windows ด้วย PowerShell

เพื่อค้นหากระบวนการที่ค้าง (ไม่ตอบสนอง) ให้รันคำสั่งต่อไปนี้:

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

การจัดการกระบวนการ Windows ด้วย PowerShell

นอกจากนี้ คุณสามารถ 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