Quản lý quy trình Windows bằng PowerShell
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 ProcessNhận quy trình - nhận danh sách các quy trình Windows đang chạy;
Bắt đầu quy trình - 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;
Gỡ lỗi quy trình - 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 tiến trình đang chạy
Lệnh ghép ngắn Get-Process hiển thị danh sách các quy 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 quy trình này;
NPM(K) - là bộ nhớ không phân trang (nhóm không phân trang). Đâ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;
PM(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 quy trình (Bộ làm việc);
-
CPU(s) - thời gian CPU được quy trình sử dụng (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 (ID phiên) - là ID phiên của quy 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 lần đầu, 2 — chạy cho người dùng đăng nhập lần thứ hai, v.v.);
Tên quy trình
Để 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ể, ví dụ: tên (
ProcessName), thời gian bắt đầu (
StartTime), tiêu đề cửa sổ quy trình (
MainWindowTitle), một tên tập tin 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 tiến trình người dùng đang chạy với GUI (các tiến trình nền và hệ thống sẽ không được hiển thị):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitleSử dụng tùy chọn IncludeUserName, bạn có thể hiển thị tên người dùng (chủ sở hữu) đã bắt đầu quy trình:
Get-Process -Name winword -IncludeUserNamesử 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 hơ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ớ 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)" -DescendingNhư chúng tôi đã 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 sử dụng bởi quy trình cụ thể 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}Bắt đầu quy trình, Dừng quy trình: Cách bắt đầu hoặc dừng quy 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 notepadNếu không có tập tin thực thi trong
$env:pathbiế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à truyền đối 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ế độ bắt đầu cửa sổ quy trình (bình thường, thu nhỏ, phóng to, ẩ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 này:
Start-Process -FilePath tracert -ArgumentList "10.1.56.21" -wait -windowstyle MaximizedSử dụng lệnh ghép ngắn Stop-Process, bạn có thể dừng bất kỳ quá trình nào. Chẳng hạn, để đóng tất cả các quy trình notepad đang chạy:
Stop-Process -Name notepadTheo mặc định, bạn không được nhắc xác nhận hủy một tiến trình. Tất cả các quy trình đáp ứng các tiêu chí được chỉ định sẽ bị dừng lại. Để có thể xác nhận việc dừng các quy trình, hãy thêm tùy chọn -Xác nhận:
Stop-Process -Name notepad.exe -ConfirmNgoài ra, bạn có thể giết 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 Windows Process Manager:
Get-Process | where-object {$_.Responding -eq $false}| Stop-ProcessSử dụng PowerShell, bạn có thể tự động khởi động lại quy trình bị treo hoặc đóng.
Quản lý quy trình trên máy tính từ xa bằng PowerShell
Bạn có thể dùng
ComputerNametùy chọn của 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 bật và định cấu hình).
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineNameChúng tôi xử lý các tính năng Get-Process tích hợp để quản lý các quy trình trên máy tính từ xa. Các tính năng PowerShell Remote có sẵn trong
Invoke-CommandVà
Enter-PSSessioncmdlet không được đề cập ở đây.
Nếu bạn muốn hủy một tiến 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 một quy 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





