Используя 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()]}}
похоже, возвращает пользователей по запросу. Оттуда, наверное, можно исходить. Надеюсь, это поможет.