К сожалению, Get-Service
не возвращает информацию об идентификаторе процесса для процессов, запущенных службами. Однако вы можете получить эту информацию через класс WMI Win32_Service
, который имеет свойство ProcessId
:
$ServicePids = (Get-Wmiobject win32_service).ProcessId | Sort-Object -Unique
$ProcessPids = (Get-Process).Id | Sort-Object -Unique
$Pids = Compare-Object $ServicePids $ProcessPids -PassThru
Get-Process -Id $Pids | Select Name,Id
Вы можете получить Id процессов с помощью Get-Process
, а затем использовать Compare-Object
для их сравнения. Переключатель -Passthru
возвращает только значения Pid (а не объект сравнения).
Я также использую Sort-Object -Unique
, чтобы свести оба списка к отсортированным уникальным спискам, чтобы они правильно сравнивались.
Наконец, если вы хотите, чтобы вывод был похож на tasklist /svc
, вы можете снова использовать Get-Process
, чтобы вернуть объекты для результирующих идентификаторов, которые мы вернули в $Pids
. Я использовал командлет Select
, чтобы отфильтровать его только по полям «Имя» и «Идентификатор», но вы, очевидно, можете изменить его так, как вам нужно.