Назад | Перейти на главную страницу

Как с помощью Powershell получить идентификатор процесса, принадлежащего конкретному пользователю?

Используя Powershell, я хочу сделать эквивалент Unix

ps -auxc | grep Emacs

kill -9 364

(Предполагая, что 365 - это pid, о котором мне сообщила первая команда.)

Как я могу это сделать? Мне невероятно сложно заставить Powershell сообщить мне владельца процесса и способ, которым я пытался получить wmi-объект win32_process, а затем превратить его в список процессов с именем «explorer.exe», которые только что запустили много explorer.exe экземпляры.

С PowerShell 4 и новее вы можете:

Get-Process -IncludeUserName | Where-Object {$_.UserName -match "peter" -and $_.ProcessName -eq "Notepad"} | Stop-Process -Force

или при использовании псевдонимов:

ps -IncludeUserName | ? {$_.UserName -match "peter" -and $_.ProcessName -eq "Notepad"} | spps -Force

не такой короткий, как в Unix, но лучше, чем в более старых версиях PowerShell.

Я нашел это с помощью быстрого Google:

$owners = @{}
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user}

get-process | select processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}}

похоже, возвращает пользователей по запросу. Оттуда, наверное, можно исходить. Надеюсь, это поможет.