Как работать с процессами через Powershell Get-Process


27 июня 2019


Работа с процессами через Powershell Get-Process

Командлет Powershell Get-Process возвращает все процессы запущенные на локальном компьютере. Команда пишется так:

Get-Process

Мы так же можем посмотреть так же процессы, запущенные на удаленном компьютере:

Get-Process -ComputerName AD

Но для того, что бы мы смогли это сделать удаленно у нас минимум должен быть включен WinRM. Если вы впервые слышите об этом, то вы можете прочитать об этом в этой статье. Так же добавлю, что ключ -ComputerName частый признак того, что мы можем выполнить команду удаленно.

Скорее всего мы хотим получить более детальную информацию или отфильтровать её. Если мы хотим получить информацию об экземплярах, достаточно заполнить ключ -Name:

Get-Process -Name notepad -IncludeUserName

Где:
-IncludeUserName - выведет имя того, кто запустил экземпляр.

Если мы не знаем имени, можно добавить * :

Get-Process -Name *otep*

Получение процессов через Powershell Get-Process

При этом если у вас запущено несколько процессов с этим именем, вернуться все.

Расшифрую заголовки:

  • Handles - Дескриптор процесса, кто-то может знать под HWND. Уникальное число потока ввода - вывода.
  • NPM(K) - Non-paged memory. Данные, которые не выгружаются на диск в килобайтах.
  • PM(K) - Pageable memory. Данные, которые могут быть выгружены на диск в килобайтах.
  • WS(K) - Process working set. Рабочий набор процесса или сумма всех страниц, которые на данный момент находятся в памяти в килобайтах.
  • CPU(s) - время использованное процессом на всех процессорах в секундах.
  • ID - идентификатор процесса, мы по нему можем фильтровать.
  • SI - Session ID. Идентификатор сеанса где 0 - запущен для всех сессий, 1 - запущен для первого залогиненного пользователя, 2 - для следующего.

Попробуем преобразовать значение из килобайтов в мегабайты:

Get-Process -Name notepad | Select-Object Name, WS, @{Name="WS(MB)"; Expression={($_.ws / 1024kb)}}

Get-Process из килобайтов в мегабайты

Где:
-Select-Object обозначаем столбцы, которые хотим вывести.

 

Как вывести детальную информацию через Powershell Get-Process

Что бы вывести всю возможную информацию два варианта. Это либо вывести объект в виде листа:

Get-Process notepad | Format-List *

Либо можно объявить в переменную, получить все имена свойств и вызывать их по отдельности:

$result = Get-Process -Name win32calc
$result | Get-Member
$result.ProcessName, $result.Product, $result.ProductVersion

Свойства Powershell Get-Process

Под такой командой powershell я могу узнать имя, которое пишется в окошке:

$result.MainWindowTitle

Get-Process Powershell Title

Свойств, которые хранит объект процесса (то что мы видим при $result | Get-Member) очень много и это главное, к чему нужно обращаться когда мы хотим узнать подробнее об объекте.

Так мы выведем все запущенные процессы, у которых есть GUI:

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize

Все процессы с GUI через Powershell Get-Process

 

Как отфильтровать процессы по утилизации в Powershell

Так мы увидим процессы, которые используют больше 67 Мб в памяти с дополнительной информацией о приоритете:

Get-Process | Where-Object {$_.WorkingSet -gt 67MB} | ft -View Priority

Powershell Get-Process Priority и фильтрация

Таким командлетом мы получи информацию по одному процессу, у которого самое высокое значение CPU. Из свойств этого объекта выбран ID, Имя, CPU и время запуска.

Get-Process | Sort-Object CPU -Descending | Select-Object ID, NAME, CPU, StartTime | select -First 1

 

Запуск и остановка процессов через Powershell

Мы можем остановить любой процесс. Например таким образом мы остановим все процессы, которые не отвечают (зависли):

Get-Process | Where-Object {$_.Responding -ne "True"} | Stop-Process

Конечно мы можем остановить процесс по идентификатору или имени:

Stop-Process -Id 5392

Таким командлетом мы остановим самый старый процесс:

Get-Process | Sort-Object StartTime | Select-Object Id,Name,StartTime | Select -First 1 | Stop-Process

Запуск экземпляра и его завершение через 5 секунд:

$app = Start-Process notepad -passthru
echo $app.Id
Start-Sleep -s 5
Stop-Process $app.Id

Все остальные команды можно узнать с помощью:

Get-Command -Noun Process

Справки с вариантами использования команд powershell:

Get-Help Get-Process

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.