使用 PowerShell 管理 Windows 进程
PowerShell 具有许多功能来管理本地或远程计算机上的进程。使用 PowerShell,您可以获取正在运行的进程列表、暂停挂起的进程、通过 Windows 标题查找进程、以隐藏或交互模式运行新进程等。
您可以在 Windows 10 中显示可用进程管理 cmdlet 的列表,如下所示:
Get-Command -Noun ProcessGet-Process - 获取正在运行的 Windows 进程列表;
Start-Process - 启动一个进程/程序;
-
Stop-Process - 强行停止(终止)进程;
Debug-Process - 调试进程;
等待进程 - 等待进程结束。
Get-Process:获取正在运行的进程列表
Get-Process cmdlet 显示本地计算机上运行的进程列表。
默认情况下,显示正在运行的进程的这些属性:
句柄 - 该进程打开的输入输出文件描述符(句柄)的数量;
NPM(K) - 是非分页内存(非分页池)。这是从未在磁盘上分页的进程数据的大小(以 KB 为单位);
PM(K) - 可分页的进程内存大小;
WS(K) - 进程(工作集)使用的物理内存大小(以KB为单位);
-
CPU(s) ——进程使用的CPU时间(计算所有CPU上的时间);
ID - 唯一的进程标识符;
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使用 GUI 显示正在运行的用户进程列表(不会显示后台和系统进程):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle使用 IncludeUserName 选项,您可以显示已启动该进程的用户名(所有者):
Get-Process -Name winword -IncludeUserName使用
Where-Object,您可以根据某些标准选择流程。例如,让我们显示使用超过 300 MB RAM 的所有进程,按内存使用量降序对它们进行排序,并以 MB 而不是 KB 为单位显示内存大小:
Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" -Descending正如我们之前所说,CPU 参数中的 Get-Process cmdlet 包含特定进程使用的处理器时间(以秒为单位)。要显示进程使用的 CPU 百分比(类似于任务管理器),请使用以下函数:
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要查找挂起的进程(未响应),请运行以下命令:
Get-Process | where-object {$_.Responding -eq $false}启动进程、停止进程:如何使用 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默认情况下,系统不会提示您确认终止进程。所有满足指定条件的进程都将停止。为了能够确认停止进程,请添加-Confirm选项:
Stop-Process -Name notepad.exe -Confirm另外,您可以按如下方式终止进程:
(Get-Process -Name cmd).Kill()通过 PowerShell,您可以强制停止所有不响应 Windows 进程管理器的应用程序:
Get-Process | where-object {$_.Responding -eq $false}| Stop-Process使用 PowerShell,您可以自动重新启动挂起或关闭的进程。
使用 PowerShell 管理远程计算机上的进程
您可以使用
ComputerNameGet-Process cmdlet 选项,以便管理远程计算机上的进程(必须启用并配置 WinRM)。
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineName我们使用内置的 Get-Process 功能来管理远程计算机上的进程。 PowerShell 远程处理功能可用于
Invoke-Command和
Enter-PSSession此处不涉及 cmdlet。
如果要终止远程计算机上的进程,请注意 Stop-Process cmdlet 没有 -ComputerName 参数。要停止远程计算机上的进程,您可以使用以下 PowerShell 代码:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess





