Управление процессами Windows с помощью PowerShell
PowerShell имеет множество функций для управления процессами на локальном или удаленном компьютере. С помощью PowerShell вы можете получить список запущенных процессов, приостановить зависший процесс, найти процесс по названию окна, запустить новый процесс в скрытом или интерактивном режиме и т.д.
Вы можете отобразить список доступных командлетов управления процессами в Windows 10 следующим образом:
Get-Command -Noun ProcessGet-Process - получить список запущенных процессов Windows;
Start-Process - запустить процесс/программу;
-
Stop-Process - принудительно остановить (убить) процесс;
Debug-Process - отладка процесса;
Wat-Process - дождаться завершения процесса.
Get-Process: получение списка запущенных процессов
Командлет Get-Process отображает список процессов, запущенных на локальном компьютере.
По умолчанию отображаются следующие свойства запущенных процессов:
Дескрипторы - количество файловых дескрипторов (дескрипторов) ввода-вывода, открытых данным процессом;
NPM(K) - невыгружаемая память (невыгружаемый пул). Это размер данных процесса (в КБ), которые никогда не выгружаются на диск;
PM(K) - размер памяти процесса, которая может быть выгружена;
WS(K) - размер физической памяти (в КБ), используемой процессом (Рабочий набор);
-
ЦП - время процессора, используемое процессом (учитывается время на всех процессорах);
ID - уникальный идентификатор процесса;
SI (Session 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Чтобы отобразить список запущенных пользовательских процессов с помощью графического интерфейса (фоновые и системные процессы отображаться не будут):
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitleС помощью опции IncludeUserName вы можете отобразить имя пользователя (владельца), запустившего процесс:
Get-Process -Name winword -IncludeUserNameС использованием
Where-Object, вы можете выбирать процессы по некоторым критериям. Например, выведем все процессы, использующие более 300 МБ ОЗУ, отсортируем их по убыванию использования памяти и покажем размер памяти в МБ, а не в КБ:
Get-Process| where-object {$_.WorkingSet -GT 300000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" -DescendingКак мы говорили ранее, командлет Get-Process в параметре 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}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, вы можете остановить любой процесс. Например, чтобы закрыть все запущенные процессы блокнота:
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
Вы можете использовать
ComputerNameопция командлета Get-Process для управления процессами на удаленных компьютерах (должен быть включен и настроен WinRM).
Get-Process -ComputerName srv01, srv02, srv03| Format-Table -Property ProcessName, ID, MachineNameМы занимаемся встроенными возможностями Get-Process для управления процессами на удаленных компьютерах. Функции удаленного взаимодействия PowerShell, доступные в
Invoke-Commandи
Enter-PSSessionкомандлеты здесь не рассматриваются.
Если вы хотите завершить процесс на удаленном компьютере, обратите внимание, что в командлете Stop-Process нет параметра -ComputerName. Чтобы остановить процесс на удаленном компьютере, вы можете использовать следующий код PowerShell:
$RemoteProcess = Get-Process -Name cmd -ComputerName srv01
Stop-Process -InputObject $RemoteProcess





