Когда нужно просмотреть информацию о процессах более детально, можно воспользоваться программами на подобии Process Explorer или Process Hacker. А если выбор ограничен? Получить информацию о процессах поможет PowerShell.
Получить информацию о процессах можно с помощью командлета Get-Process. Запускаем PowerShell, и выполняем команду:
Вывод команды представлен в виде таблицы. По умолчанию выводятся поля: Количество дескрипторов процесса (Handles), Объем невыгружаемой памяти процесса (NPM - Nonpaged System Memory), Объем памяти процесса возможный для записи в файл подкачки (PM - Paged System Memory), Объем памяти процесса выделенный в оперативной памяти (WS - Working Set), Использованное процессорное время (CPU), Имя процесса (ProcessName).
Полученные данные, представляют полный список процессов системы. Что если вам необходимо отслеживать только конкретные процессы. Вывод командлета Get-Process можно отфильтровать используя имя конкретного процесса, или маску имени процесса.
Теперь все то же самое, но с использованием масок.
Для ясности, знак звездочки *, означает любое количество символов, а знак вопросительного знака ?, один любой символ.
Кроме фильтрации по именам процессов, можно отфильтровать и выводимые поля всей таблицы. К примеру, нас интересуют только поля Id, ProcessName, WS. Причем вывод должен быть именно в указанном порядке.
Кроме базовых полей (Handles, NPM, PM, WS, CPU, SI, ProcessName) выводимых командлетом Get-Process, существуют еще дополнительные. По умолчанию они не выводятся при выполнении командлета, так как вывод всех полей в виде таблицы, не может поместиться в окне консоли, даже если данное окно развернуть на весь экран. Но отобразить все поля все же можно.
Для примера, выведем все поля процесса winlogon в виде списка.
Как можно заметить, полей довольно-таки много. Причем значение некоторых дублируется, к примеру Name и ProcessName. Это сокращения, для удобства использования.
Дополнительные поля содержат полезную информацию, к примеру:
Path - Путь до исполняемого файла процесса.
Description - Описание исполняемого файла.
MainWindowTitle - Заголовок главного окна процесса, если окно конечно есть.
Modules - Модули используемые процессом.
MainModule - Главный модуль процесса.
StartTime - Время запуска процесса.
Priority - Приоритет процесса.
Company - Компания создавшая исполняемый файл процесса.
ProductVersion - Версия исполняемого файла процесса.
UserProcessorTime - То же что и CPU (использованное процессорное время), но только в более удобном формате.
Threads -
Составим из этих полей свою версию вывода информации о процессах.
Если вы обратили внимание, то скорее всего заметили, что среди дополнительных полей нет информации о пользователе запустившем конкретный процесс. Вывести данную информацию можно выполнив командлет Get-Process с ключом -IncludeUserName.
Выполнить сортировку вывода командлета Get-Process можно передав его вывод по конвейеру командлету Sort-Object. К примеру, сортировка по имени процесса, в алфавитном порядке.
Теперь, отсортируем вывод по полую WS, в порядке убывания. Так мы сможем определить самый прожорливый процесс, он будет первым в списке.
Условия, позволяют выбрать из списка всех процессов, те, что удовлетворяют определенным критериям. К примеру выберем из списка процессов, все, объем выделенной памяти для которых больше 50 МБ.
Вся выборка осуществляется с помощью командлета Where-Object. Если вкратце, данный командлет принимает на вход указанный параметр, и выполняет его сравнение. В данном случае, в качестве параметра выступает поле WS, значение которого должно быть больше или равно 50MB. Данное равенство указывается с помощью параметра -ge (Greater than or equal).
Существуют и другие параметры сравнения: -gt больше, -lt меньше, -eq равно, -ge больше/равно, -le меньше/равно. Подробнее все параметры сравнения, можно посмотреть в справке по командлету Where-Object.
За запущенными процессами, могут скрываться службы. То есть, какой-то из процессов может быть на самом деле запущенной службой. Попробуем вывести такие службы.
Команду можно дополнить описанием каждой службы, и сократить ее размер за счет использования алиасов.
Научившись фильтровать необходимые процессы, можно с ними можно выполнять различные действия. К примеру можно их закрыть.
Допустим в системе запущено 4 процесса notepad и 1 notepad++.
Закрыть 4 обычных блокнота, можно передав отфильтрованный список командлету Stop-Process.
Получить список модулей используемых процессом, можно с помощью поля Modules. Желательно выводить данное поле для конкретно отдельного процесса, так как вывод данного свойства для всех процессов, выведет общий список всех используемых модулей.
Если внимательно посмотреть на список модулей, то можно увидеть загруженные библиотеки DLL находящиеся в одной папке с исполняемым файлом.
В статье было рассмотрено: Как вывести список процессов в PowerShell? Как выполнить сортировку процессов в PowerShell? Как вывести взаимосвязанные службы процессов в PowerShell? Как вывести взаимосвязанные модули процесса в PowerShell? Как отфильтровать список процессов в PowerShell? Как вывести процессы по заданному условию в PowerShell?
Содержание
- Вывод Списка Процессов Системы
- Фильтрация Выводимых Данных
- Вывод Дополнительной Информации
- Пользователь Запустивший Процесс
- Сортировка Вывода
- Вывод Процессов по Условию
- Вывод Взаимосвязанных Служб
- Закрытие Процессов
- Вывод Взаимосвязанных Модулей
- Итог
Вывод Списка Процессов Системы
Получить информацию о процессах можно с помощью командлета Get-Process. Запускаем PowerShell, и выполняем команду:
# Вывод списка процессов
Get-Process
Вывод команды представлен в виде таблицы. По умолчанию выводятся поля: Количество дескрипторов процесса (Handles), Объем невыгружаемой памяти процесса (NPM - Nonpaged System Memory), Объем памяти процесса возможный для записи в файл подкачки (PM - Paged System Memory), Объем памяти процесса выделенный в оперативной памяти (WS - Working Set), Использованное процессорное время (CPU), Имя процесса (ProcessName).
Фильтрация Выводимых Данных
Полученные данные, представляют полный список процессов системы. Что если вам необходимо отслеживать только конкретные процессы. Вывод командлета Get-Process можно отфильтровать используя имя конкретного процесса, или маску имени процесса.
# Вывод всех процессов с именем "browser"
Get-Process browser
Теперь все то же самое, но с использованием масок.
# Вывод всех процессов начинающихся на "bro"
Get-Process bro*
Для ясности, знак звездочки *, означает любое количество символов, а знак вопросительного знака ?, один любой символ.
Кроме фильтрации по именам процессов, можно отфильтровать и выводимые поля всей таблицы. К примеру, нас интересуют только поля Id, ProcessName, WS. Причем вывод должен быть именно в указанном порядке.
# Вывод указанных полей всех процессов начинающихся на "bro"
Get-Process bro* | Select-Object Id, ProcessName, WS
Вывод Дополнительной Информации
Кроме базовых полей (Handles, NPM, PM, WS, CPU, SI, ProcessName) выводимых командлетом Get-Process, существуют еще дополнительные. По умолчанию они не выводятся при выполнении командлета, так как вывод всех полей в виде таблицы, не может поместиться в окне консоли, даже если данное окно развернуть на весь экран. Но отобразить все поля все же можно.
Для примера, выведем все поля процесса winlogon в виде списка.
# Вывод всех полей процесса "winlogon" в виде списка
Get-Process winlogon | Format-List *
Как можно заметить, полей довольно-таки много. Причем значение некоторых дублируется, к примеру Name и ProcessName. Это сокращения, для удобства использования.
Path - Путь до исполняемого файла процесса.
Description - Описание исполняемого файла.
MainWindowTitle - Заголовок главного окна процесса, если окно конечно есть.
Modules - Модули используемые процессом.
MainModule - Главный модуль процесса.
StartTime - Время запуска процесса.
Priority - Приоритет процесса.
Company - Компания создавшая исполняемый файл процесса.
ProductVersion - Версия исполняемого файла процесса.
UserProcessorTime - То же что и CPU (использованное процессорное время), но только в более удобном формате.
Threads -
Составим из этих полей свою версию вывода информации о процессах.
# Вывод указанных полей в виде таблицы
Get-Process v*,p*,n* | Format-Table Id, Path, MainWindowT*, Description, Company, ProductVersion
Пользователь Запустивший Процесс
Если вы обратили внимание, то скорее всего заметили, что среди дополнительных полей нет информации о пользователе запустившем конкретный процесс. Вывести данную информацию можно выполнив командлет Get-Process с ключом -IncludeUserName.
# Вывод указанных процессов с информацией о пользователе
Get-Process v*,p*,n* -IncludeUserName | Format-Table -AutoSize
Сортировка Вывода
Выполнить сортировку вывода командлета Get-Process можно передав его вывод по конвейеру командлету Sort-Object. К примеру, сортировка по имени процесса, в алфавитном порядке.
# Выполнение сортировки по имени процесса
Get-Process | Sort-Object ProcessName
Теперь, отсортируем вывод по полую WS, в порядке убывания. Так мы сможем определить самый прожорливый процесс, он будет первым в списке.
# Выполнение сортировки по используемой оперативной памяти
Get-Process | Sort-Object WS -Descending
Вывод Процессов по Условию
Условия, позволяют выбрать из списка всех процессов, те, что удовлетворяют определенным критериям. К примеру выберем из списка процессов, все, объем выделенной памяти для которых больше 50 МБ.
# Вывод процессов объем выделенной памяти для которых больше или равен 50 МБ
Get-Process | Where-Object WS -ge 50MB
Вся выборка осуществляется с помощью командлета Where-Object. Если вкратце, данный командлет принимает на вход указанный параметр, и выполняет его сравнение. В данном случае, в качестве параметра выступает поле WS, значение которого должно быть больше или равно 50MB. Данное равенство указывается с помощью параметра -ge (Greater than or equal).
Существуют и другие параметры сравнения: -gt больше, -lt меньше, -eq равно, -ge больше/равно, -le меньше/равно. Подробнее все параметры сравнения, можно посмотреть в справке по командлету Where-Object.
# Вызов онлайн-справки по командлету Where-Object
Get-Help Where-Object -online
Вывод Взаимосвязанных Служб
За запущенными процессами, могут скрываться службы. То есть, какой-то из процессов может быть на самом деле запущенной службой. Попробуем вывести такие службы.
# Вывод взаимосвязанных служб с сортировкой по ID процесса
Get-WmiObject Win32_Service | Where-Object ProcessId -In (Get-Process svc*).Id | Sort-Object proc* | Format-Table proc*, pathn*, stat*, name*
Команду можно дополнить описанием каждой службы, и сократить ее размер за счет использования алиасов.
# Вывод взаимосвязанных служб с сортировкой по ID процесса
gwmi Win32_Service | ? Proc* -In(ps svc*).Id | sort proc* | ft proc*, pathn*, stat*, name*, des*
Закрытие Процессов
Научившись фильтровать необходимые процессы, можно с ними можно выполнять различные действия. К примеру можно их закрыть.
Допустим в системе запущено 4 процесса notepad и 1 notepad++.
Закрыть 4 обычных блокнота, можно передав отфильтрованный список командлету Stop-Process.
# Закрыть все процессы "notepad"
Get-Process notepad | Stop-Process
Вывод Взаимосвязанных Модулей
Получить список модулей используемых процессом, можно с помощью поля Modules. Желательно выводить данное поле для конкретно отдельного процесса, так как вывод данного свойства для всех процессов, выведет общий список всех используемых модулей.
# Вывод взаимосвязанных модулей процесса "x64dbg"
(get-process x64dbg).Modules
Если внимательно посмотреть на список модулей, то можно увидеть загруженные библиотеки DLL находящиеся в одной папке с исполняемым файлом.
Итог
В статье было рассмотрено: Как вывести список процессов в PowerShell? Как выполнить сортировку процессов в PowerShell? Как вывести взаимосвязанные службы процессов в PowerShell? Как вывести взаимосвязанные модули процесса в PowerShell? Как отфильтровать список процессов в PowerShell? Как вывести процессы по заданному условию в PowerShell?
Комментариев нет :
Отправить комментарий