PowerShell надає широкі можливості управління процесами на локальному або віддаленому комп’ютері. За допомогою PowerShell можна отримати список запущених процесів, призупинити завислий процес, знайти процес по заголовку вікна, запустити новий процес в прихованому або інтерактивному режимі.

Список доступних командлетів управління процесами в Windows 10 можна вивести так:

Get-Command –Noun Process

командлети управління процесами в powershell

  • Get-Process – отримати список запущених процесів;
  • Початок-процес – запустити процес / програму;
  • Стоп-процес – примусово зупинити процес;
  • Процес налагодження – використовується для налагодження процесів;
  • Процес очікування – використовується для очікування закінчення процесу.

Get-Process – отримання списку запущених процесів

Командир Get-Process дозволяє вивести список запущених процесів на локальному комп’ютері.

Get-Process список запушених процесів

За замовчуванням виводяться наступні властивості запущених процесів:

  • Ручки – кількість дескрипторів введення – виведення, які відрив даний процес;
  • NPM (K) – Non-paged memory (невивантажуваного пул). Розмір даних процесу (в Кб.), Які ніколи не потрапляють в файл підкачки на диск;
  • PM (K) – розмір пам’яті процесу, яка може бути вивантажено на диск;
  • WS (K) – розмір фізичної пам’яті в КБ, яку використовує процес (working set).
  • ЦП – процесорний час, використане процесом (враховується час на всіх CPU);
  • Посвідчення особи – ідентифікатор процесу;
  • І (Session ID) – ідентифікатор сеансу процесу (0 – запущений для всіх сесій, 1 – для першого залогіненним користувача, 2 – для другого і т.д.);
  • ProcessName – ім’я процесу.

Щоб отримати всі властивості декількох процесів:

Get-Process winword, 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

Get-Process |  Where-Object {$ _. MainWindowTitle - процеси з графічними вікнами

За допомогою параметра IncludeUserName можна вивести ім’я користувача (власника), який запустив процес:

Get-Process -Name winword -IncludeUserName

За допомогою Where-Object можна вибрати процеси відповідно до заданих критеріїв. Наприклад, виведемо всі процеси, які використовуються більше 200 Мб оперативної пам’яті, відсортуємо процеси в порядку убування використовуваного обсягу RAM, розмір пам’яті з КБ перетворимо в Мб:

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

Get-Process знайти процеси, які займають більше 200 Мб оперативної пам'яті

Як ми вже говорили раніше командлет Get-Process в параметрі CPU містить час використання процесора конкретним процесом в секундах. Щоб відобразити використання CPU процесами (по аналогії з Task Manager), використовуйте таку функцію:

function Get-CPUPercent
{
$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-CPUPercent

PowerShellс скрипт з Get-Process виводить відсоток використання CPU процесами

Щоб знайти завислі процеси (які не відповідають), виконайте команду:

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

Start-Process, Stop-Process: запуск і зупинка процесів з PowerShell

Щоб запустити новий процес за допомогою PowerShell використовується команда:

Start-Process -FilePath notepad

Якщо каталог з виконуваним файлом відсутня в змінної оточення $ env: path, потрібно вказати повний шлях до файлу:

Start-Process -FilePath 'C:distrapp.exe'

Можна запустити програму і передати їй аргументи:

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

За допомогою параметра WindowStyle ви можете задати режим запуску вікна процесу (normal, minimized, maximized, hidden). Наприклад, щоб запустити програму в максимально развернуом вікні і дочекатися завершення процесу, виконайте команду:

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

За допомогою командлета Stop-Process можна завершити будь-який процес. Наприклад, щоб закрити всі запущені процеси notepad:

Stop-Process -Name notepad

За замовчуванням не вимагається підтвердження завершення процесу. Закриваються всі процеси, які відповідають зазначеним критеріям. Щоб запросити підтвердження завершення для кожного процесу, додайте –Підтвердити.

Stop-Process -Name notepad.exe -Confirm

Stop-Process завершити процес powershell

Також завершити процес можна так:

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

З PowerShell можна примусово завершити всі додатки, які не відповідають диспетчеру процесів Windows:

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

PowerShell: управління процесами на віддаленому комп’ютері

За допомогою аргументу ComputerName командлет Get-Process дозволяє управляти процесами на віддалених комп’ютерах (повинен бути включений і налаштований WinRM).

Get-Process -ComputerName dc01, dc02| Format-Table -Property ProcessName, ID, MachineName

Ми розглядаємо вбудовані можливості комнадлета Get-Process для управління процесами на віддалених комп’ютерах. Тут не враховуються можливості PowerShell Remoting, які доступні в Командлети Invoke-Command і Enter-PSSession.

Якщо ви хочете завершити процес на віддаленому комп’ютері, майте на увазі, що у командлет Stop-Process відсутня параметр -ComputerName. Для завершення процесу на віддаленому комп’ютері можна використовувати такий PowerShell код:

$RProc = Get-Process -Name notepad -ComputerName dc01
Stop-Process -InputObject $RProc

Leave a Reply

Your email address will not be published. Required fields are marked *