PowerShell надає широкі можливості управління процесами на локальному або віддаленому комп’ютері. За допомогою PowerShell можна отримати список запущених процесів, призупинити завислий процес, знайти процес по заголовку вікна, запустити новий процес в прихованому або інтерактивному режимі.
Список доступних командлетів управління процесами в Windows 10 можна вивести так:
Get-Command –Noun 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
За допомогою параметра 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 в параметрі 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
Щоб знайти завислі процеси (які не відповідають), виконайте команду:
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
(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
Якщо ви хочете завершити процес на віддаленому комп’ютері, майте на увазі, що у командлет Stop-Process відсутня параметр -ComputerName. Для завершення процесу на віддаленому комп’ютері можна використовувати такий PowerShell код:
$RProc = Get-Process -Name notepad -ComputerName dc01
Stop-Process -InputObject $RProc