Com o Powershell, como posso obter o id de um processo pertencente a um usuário específico?

1

Usando o Powershell, quero fazer o equivalente ao Unix

ps -auxc | grep Emacs

kill -9 364

(Assumindo que 365 foi o pid, o primeiro comando me disse.)

Como faço isso? Eu acho incrivelmente difícil conseguir que o Powershell me diga o proprietário de um processo e a maneira como eu tentei, obtendo um win32_process wmi-object e então fazendo isso em uma lista de processos chamada "explorer.exe" apenas iniciou lotes do explorer.exe instâncias.

    
por Andrew J. Brehm 09.02.2011 / 15:09

2 respostas

1

Eu encontrei isso com um rápido google:

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

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

parece retornar usuários conforme solicitado. Você provavelmente pode continuar a partir daí. Espero que ajude.

    
por 09.02.2011 / 15:33
1

Com o PowerShell 4 e mais recente, você pode fazer:

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

ou ao usar aliases:

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

não tão curto quanto no Unix, mas melhor do que nas versões anteriores do PowerShell.

    
por 29.08.2015 / 13:37