Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Quản lý tiến trình Windows với PowerShell

PowerShell có nhiều tính năng để quản lý tiến trình trên máy tính cục bộ hoặc từ xa. Sử dụng PowerShell, bạn có thể lấy danh sách tiến trình đang chạy, tạm dừng tiến trình bị treo, tìm tiến trình theo tiêu đề cửa sổ, chạy tiến trình mới ở chế độ ẩn hoặc tương tác, v.v.

Bạn có thể hiển thị danh sách cmdlet quản lý tiến trình có sẵn trong Windows 10 như sau:

Get-Command –Noun Process
  • Get-Process – lấy danh sách tiến trình Windows đang chạy;
  • Start-Process – khởi động tiến trình/chương trình;
  • Stop-Process – buộc dừng (kill) tiến trình;
  • Debug-Process – debug tiến trình;
  • Wait-Process – chờ tiến trình kết thúc.

Get-Process: Lấy danh sách tiến trình đang chạy

Cmdlet Get-Process hiển thị danh sách tiến trình đang chạy trên máy tính cục bộ.

Mặc định, các thuộc tính sau của tiến trình đang chạy được hiển thị:

  • Handles – số lượng descriptor file input-output (handles) được mở bởi tiến trình này;
  • NPM(K) – bộ nhớ non-paged (non-paged pool). Đây là kích thước dữ liệu tiến trình (tính bằng KB) chưa bao giờ được paging ra đĩa;
  • PM(K) – kích thước bộ nhớ tiến trình có thể được paging;
  • WS(K) – kích thước bộ nhớ vật lý (tính bằng KB) được tiến trình sử dụng (Working Set);
  • CPU(s) – thời gian CPU được tiến trình sử dụng (thời gian trên tất cả CPU được tính);
  • ID – định danh tiến trình duy nhất;
  • SI (Session ID) – là ID phiên của tiến trình (0 nghĩa là chạy cho tất cả phiên, 1 – chạy cho user đăng nhập đầu tiên, 2 – cho user thứ hai, v.v.);
  • ProcessName

Để liệt kê tất cả thuộc tính của nhiều tiến trình:

Get-Process cmd,excel,notep* | Format-List *

Bạn có thể hiển thị chỉ các thuộc tính tiến trình cụ thể, ví dụ: tên (ProcessName), thời gian bắt đầu (StartTime), tiêu đề cửa sổ tiến trình (MainWindowTitle), tên file thực thi (Path) và tên nhà phát triển (Company):

Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft

Để hiển thị danh sách tiến trình người dùng đang chạy có GUI (tiến trình nền và hệ thống sẽ không hiển thị):

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

Sử dụng tùy chọn IncludeUserName, bạn có thể hiển thị tên người dùng (chủ sở hữu) đã khởi động tiến trình:

Get-Process -Name winword -IncludeUserName

Sử dụng Where-Object, bạn có thể chọn tiến trình theo một số tiêu chí. Ví dụ, hiển thị tất cả tiến trình dùng hơn 300 MB RAM, sắp xếp giảm dần theo mức sử dụng bộ nhớ và hiển thị kích thước bộ nhớ tính bằng MB thay vì KB:

Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending

Như đã nói trước, cmdlet Get-Process trong tham số CPU chứa thời gian xử lý được tiến trình cụ thể sử dụng tính bằng giây. Để hiển thị phần trăm CPU được tiến trình sử dụng (tương tự Task Manager), dùng hàm sau:

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

Để tìm tiến trình bị treo (không phản hồi), chạy lệnh sau:

Get-Process | where-object {$_.Responding -eq $false}

Start-Process, Stop-Process: Cách khởi động hoặc dừng tiến trình với PowerShell

Để khởi động tiến trình mới bằng PowerShell, dùng lệnh:

Start-Process -FilePath notepad

Nếu không có file thực thi trong biến môi trường $env:path, hãy chỉ định đường dẫn đầy đủ đến file:

Start-Process -FilePath 'C:\distr\app.exe'

Bạn có thể chạy chương trình và truyền tham số cho nó:

Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"

Sử dụng tùy chọn WindowStyle, bạn có thể đặt chế độ khởi động cửa sổ tiến trình (normal, minimized, maximized, hidden). Ví dụ, để chạy chương trình trong cửa sổ tối đa và chờ cho đến khi tiến trình kết thúc, chạy lệnh:

Start-Process -FilePath tracert -ArgumentList "10.1.56.21" –wait -windowstyle Maximized

Sử dụng cmdlet Stop-Process, bạn có thể dừng bất kỳ tiến trình nào. Ví dụ, để đóng tất cả tiến trình notepad đang chạy:

Stop-Process -Name notepad

Mặc định, bạn không được nhắc xác nhận kill tiến trình. Tất cả tiến trình đáp ứng tiêu chí sẽ bị dừng. Để có thể xác nhận dừng tiến trình, thêm tùy chọn –Confirm:

Stop-Process -Name notepad.exe -Confirm

Cũng có thể kill tiến trình như sau:

(Get-Process -Name cmd).Kill()

Từ PowerShell, bạn có thể buộc dừng tất cả ứng dụng không phản hồi Windows Process Manager:

Get-Process | where-object {$_.Responding -eq $false}| Stop-Process

Sử dụng PowerShell, bạn có thể tự động khởi động lại tiến trình bị treo hoặc đã đóng.

Quản lý tiến trình trên máy tính từ xa bằng PowerShell

Bạn có thể dùng tùy chọn ComputerName của cmdlet Get-Process để quản lý tiến trình trên máy tính từ xa (WinRM phải được bật và cấu hình).

Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName

Chúng ta xử lý các tính năng tích hợp của Get-Process để quản lý tiến trình trên máy tính từ xa. Tính năng PowerShell Remoting có sẵn trong cmdlet Invoke-Command và Enter-PSSession không được đề cập ở đây.

Nếu bạn muốn kill tiến trình trên máy tính từ xa, lưu ý rằng cmdlet Stop-Process không có tham số –ComputerName. Để dừng tiến trình trên máy tính từ xa, bạn có thể dùng code PowerShell sau:

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