Командлет Powershell Get-Process возвращает все процессы запущенные на локальном компьютере. Команда пишется так:
Get-Process
Мы так же можем посмотреть так же процессы, запущенные на удаленном компьютере:
Get-Process -ComputerName AD
Но для того, что бы мы смогли это сделать удаленно у нас минимум должен быть включен WinRM. Если вы впервые слышите об этом, то вы можете прочитать об этом в этой статье. Так же добавлю, что ключ -ComputerName частый признак того, что мы можем выполнить команду удаленно.
Скорее всего мы хотим получить более детальную информацию или отфильтровать её. Если мы хотим получить информацию об экземплярах, достаточно заполнить ключ -Name:
Get-Process -Name notepad -IncludeUserName
Где:
-IncludeUserName - выведет имя того, кто запустил экземпляр.
Если мы не знаем имени, можно добавить * :
Get-Process -Name *otep*
При этом если у вас запущено несколько процессов с этим именем, вернуться все.
Расшифрую заголовки:
- 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)}}
Где:
-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 я могу узнать имя, которое пишется в окошке:
$result.MainWindowTitle
Свойств, которые хранит объект процесса (то что мы видим при $result | Get-Member) очень много и это главное, к чему нужно обращаться когда мы хотим узнать подробнее об объекте.
Так мы выведем все запущенные процессы, у которых есть GUI:
Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize
Как отфильтровать процессы по утилизации в Powershell
Так мы увидим процессы, которые используют больше 67 Мб в памяти с дополнительной информацией о приоритете:
Get-Process | Where-Object {$_.WorkingSet -gt 67MB} | ft -View 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
...
Подписывайтесь на наш Telegram канал
Теги: #powershell