Главная

Wednesday, 12 July 2017

Корреляция процессов и служб в Powershell.

Всем привет.

Как вы знаете, с версии 7 Windows Диспетчер задач приобрел очень полезную фишку - он может показать зависимость между процессами и службами.  Что я имею ввиду?

Вы можете выбрать любой процесс на вкладке "Процессы", правым кликом вызвать всплювающее меню, и там внизу выбрать "Перейти к службам". И вуаля, синим цветом будут выделены службы в которых это процесс учавствует.

 

Точно также вы можете выбрать службу на вкладке "Службы", правым кликом вызвать всплювающее меню, и там внизу выбрать "Перейти к процессу".


Если вам ничего не выбралось то это не значит что такого процесса нет, просто надо обязательно отметить "Отображать процессы всех пользователей".

Тоже самое, и даже больше, выполняется в Powershell.

Так получим полную информацию по процессу SNMP:
Write-Host "= 0 ====================================="
#List of DLLs this process
$p = get-process snmp
$p | fl *

А так какие DLL-библиотеки он использует: 
Write-Host "= 1 ====================================="
$p.modules

Ну и глянуть какие ресурсы и сколько использует конкретная DLL:
Write-Host "= 1.1 ====================================="
#about current DLL
get-process | where-object {$_.modules -match "usp10.dll"}

А теперь провернем тоже что делали выше с "Диспетчер задач".
Получаем еще раз информацию по процессу: 
Write-Host "= 2 ====================================="
#about current Process
$p = get-wmiobject -class win32_process -filter "Name='snmp.exe'"
$p | fl *

А так получаем службы которые  связаны с этим процессом:
Write-Host "= 2.1 ====================================="
$index=$p.processid
get-wmiobject -class win32_service -filter "ProcessId=$index"

Обратная задачка - читаем про службу  SNMP:
Write-Host "= 3 ====================================="
#about current Service
$s = get-wmiobject -class win32_service -filter "name='SNMP'"
$s | fl *

И получаем процесс имеющий к ней отношение:
Write-Host "= 3.1 ====================================="
#List of processes for current Service
get-process -id $s.processid

Или одним махом можно сделать так:
Write-Host "= 3.2 ====================================="
get-wmiobject -class win32_service -filter "name='SNMP'" |
foreach ($a) {get-process -id $_.processid}

Вот и все. Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?