Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

PowerShell มีคุณสมบัติมากมายในการจัดการกระบวนการบนคอมพิวเตอร์ในพื้นที่หรือคอมพิวเตอร์ระยะไกล เมื่อใช้ PowerShell คุณจะได้รับรายการกระบวนการที่กำลังทำงาน ระงับกระบวนการที่หยุดทำงาน ค้นหากระบวนการโดยใช้ชื่อหน้าต่าง เรียกใช้กระบวนการใหม่ในโหมดซ่อนเร้นหรือโหมดโต้ตอบ ฯลฯ

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

Get-Command –Noun Process

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

  • รับกระบวนการ – รับรายการกระบวนการของ Windows ที่ทำงานอยู่
  • เริ่มกระบวนการ – เริ่มกระบวนการ/โปรแกรม
  • หยุดกระบวนการ – บังคับหยุด (ฆ่า) กระบวนการ
  • ดีบัก-โพรเซส – ดีบักกระบวนการ
  • รอดำเนินการ – รอจนกว่ากระบวนการจะสิ้นสุดลง

รับกระบวนการ:รับรายการกระบวนการที่ทำงานอยู่

Get-Process cmdlet แสดงรายการกระบวนการที่ทำงานอยู่บนเครื่องคอมพิวเตอร์

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

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

  • ด้ามจับ – จำนวนตัวอธิบายไฟล์อินพุต-เอาต์พุต (แฮนเดิล) ที่เปิดโดยกระบวนการนี้
  • 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

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

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

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

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

การใช้ รวมชื่อผู้ใช้ ตัวเลือก คุณสามารถแสดงชื่อผู้ใช้ (เจ้าของ) ที่เริ่มกระบวนการ:

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 คุณสามารถหยุดกระบวนการใดก็ได้ ตัวอย่างเช่น ในการปิดกระบวนการแผ่นจดบันทึกที่ทำงานอยู่ทั้งหมด:

Stop-Process -Name notepad

โดยค่าเริ่มต้น คุณจะไม่ได้รับพร้อมท์ให้ยืนยันการฆ่ากระบวนการ กระบวนการทั้งหมดที่ตรงตามเกณฑ์ที่กำหนดจะหยุดลง หากต้องการยืนยันกระบวนการหยุด ให้เพิ่ม –ยืนยัน ตัวเลือก:

Stop-Process -Name notepad.exe -Confirm

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

นอกจากนี้ คุณสามารถฆ่ากระบวนการได้ดังนี้:

(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 มีอยู่ใน Invoke-Command และ Enter-PSSession cmdlets จะไม่ครอบคลุมที่นี่

ถ้าคุณต้องการฆ่ากระบวนการบนคอมพิวเตอร์ระยะไกล โปรดทราบว่า cmdlet Stop-Process ไม่มีพารามิเตอร์ –ComputerName หากต้องการหยุดกระบวนการบนคอมพิวเตอร์ระยะไกล คุณสามารถใช้รหัส PowerShell ต่อไปนี้:

$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess