PowerShell có rất nhiều tính năng để quản lý các quy trình trên máy tính cục bộ hoặc máy tính từ xa. Sử dụng PowerShell, bạn có thể nhận danh sách các quy trình đang chạy, tạm dừng quy trình bị treo, tìm quy trình theo tiêu đề cửa sổ, chạy quy trình mới ở chế độ ẩn hoặc tương tác, v.v.
Bạn có thể hiển thị danh sách các lệnh ghép ngắn quản lý quy trình có sẵn trong Windows 10 như sau:
Get-Command –Noun Process
- Nhận quá trình - nhận danh sách các quy trình Windows đang chạy;
- Quy trình bắt đầu - bắt đầu một quy trình / chương trình;
- Dừng quá trình - buộc dừng (giết) quá trình;
- Quy trình gỡ lỗi - gỡ lỗi một quy trình;
- Quá trình Chờ - đợi cho đến khi quá trình kết thúc.
Get-Process:Lấy danh sách các quá trình đang chạy
Lệnh ghép ngắn Get-Process hiển thị danh sách các tiến trình đang chạy trên máy tính cục bộ.
Theo mặc định, các thuộc tính này của các quy trình đang chạy được hiển thị:
- Xử lý - số lượng bộ mô tả tệp đầu vào-đầu ra (xử lý) được mở bởi quá trình này;
- NPM (K) - là vùng nhớ không phân trang (non-paged pool). Đây là kích thước của dữ liệu quy trình (tính bằng KB) không bao giờ được phân trang trên đĩa;
- CH (K) - kích thước của bộ nhớ tiến trình có thể được phân trang;
- WS (K) - kích thước của bộ nhớ vật lý (tính bằng KB) được sử dụng bởi quá trình (Bộ làm việc);
- (Các) CPU - thời gian CPU được sử dụng bởi quá trình (thời gian trên tất cả các CPU được tính);
- ID - mã định danh quy trình duy nhất;
- SI (Session ID) - là ID phiên của quá trình (0 có nghĩa là chạy cho tất cả các phiên, 1- chạy cho người dùng đăng nhập đầu tiên, 2 - chạy cho người dùng đăng nhập thứ hai, v.v.);
- ProcessName
Để liệt kê tất cả các thuộc tính của nhiều quy trình:
Get-Process cmd,excel,notep* | Format-List *
Bạn chỉ có thể hiển thị các thuộc tính quy trình cụ thể, chẳng hạn như tên (ProcessName
), thời gian bắt đầu (StartTime
), tiêu đề cửa sổ quy trình (MainWindowTitle
), tên tệp 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 các quy trình người dùng đang chạy với GUI (các quy trình nền và hệ thống sẽ không được hiển thị):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle
Sử dụng Tên người dùng tùy chọn, bạn có thể hiển thị tên người dùng (chủ sở hữu) đã bắt đầu quá trình:
Get-Process -Name winword -IncludeUserName
Sử dụng Where-Object
, bạn có thể chọn các quy trình theo một số tiêu chí. Ví dụ:hãy hiển thị tất cả các quy trình sử dụng trên 300 MB RAM, sắp xếp chúng theo thứ tự giảm dần theo mức sử dụng bộ nhớ và hiển thị kích thước bộ 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ư chúng ta đã nói trước đó, lệnh ghép ngắn Get-Process trong tham số CPU chứa thời gian bộ xử lý được quy trình cụ thể sử dụng tính bằng giây. Để hiển thị phần trăm CPU được sử dụng bởi các quy trình (tương tự như Trình quản lý tác vụ), hãy sử dụng chức năng này:
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 các tiến trình bị treo (không phản hồi), hãy chạy lệnh sau:
Get-Process | where-object {$_.Responding -eq $false}
Start-Process, Stop-Process:Cách bắt đầu hoặc dừng quá trình với PowerShell
Để bắt đầu một quy trình mới bằng PowerShell, lệnh này được sử dụng:
Start-Process -FilePath notepad
Nếu không có tệp thực thi nào trong $env:path
biến môi trường, chỉ định đường dẫn đầy đủ đến tệp:
Start-Process -FilePath 'C:\distr\app.exe'
Bạn có thể chạy một chương trình và chuyển các đối số cho nó:
Start-Process -FilePath ping -ArgumentList "-n 10 10.1.56.21"
Sử dụng WindowStyle tùy chọn, bạn có thể đặt chế độ bắt đầu cửa sổ quy trình (bình thường, thu nhỏ, tối đa, ẩn). Ví dụ:để chạy một chương trình trong cửa sổ được phóng to và đợi cho đến khi quá trình kết thúc, hãy chạy lệnh sau:
Start-Process -FilePath tracert -ArgumentList "10.1.56.21" –wait -windowstyle Maximized
Sử dụng lệnh ghép ngắn Stop-Process, bạn có thể dừng bất kỳ quá trình nào. Ví dụ:để đóng tất cả các quy trình notepad đang chạy:
Stop-Process -Name notepad
Theo mặc định, bạn không được nhắc xác nhận việc hủy một quy trình. Tất cả các quá trình đáp ứng các tiêu chí đã chỉ định sẽ bị dừng lại. Để có thể xác nhận việc dừng các quá trình, hãy thêm mục –Xác nhận tùy chọn:
Stop-Process -Name notepad.exe -Confirm
Ngoài ra, bạn có thể kết thúc một quá trình như sau:
(Get-Process -Name cmd).Kill()
Từ PowerShell, bạn có thể buộc dừng tất cả các ứng dụng không phản hồi với Trình quản lý quy trình của Windows:
Get-Process | where-object {$_.Responding -eq $false}| Stop-Process
Quản lý quy trình trên máy tính từ xa bằng PowerShell
Bạn có thể sử dụng ComputerName
tùy chọn lệnh ghép ngắn Get-Process để quản lý các quy trình trên máy tính từ xa (WinRM phải được kích hoạt và định cấu hình).
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName
Invoke-Command
và Enter-PSSession
cmdlet không được đề cập ở đây. Nếu bạn muốn hủy một quy trình trên một máy tính từ xa, hãy lưu ý rằng lệnh ghép ngắn Stop-Process không có tham số –ComputerName. Để dừng quá trình trên máy tính từ xa, bạn có thể sử dụng mã PowerShell sau:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess