使用 Powershell,如何获取特定用户拥有的进程的 id?

使用 Powershell,如何获取特定用户拥有的进程的 id?

使用 Powershell,我想做与 Unix 相当的事情

ps -auxc | grep Emacs

kill -9 364

(假设 365 是第一个命令告诉我的 pid。)

我该怎么做?我发现让 Powershell 告诉我进程的所有者非常困难,我尝试的方式是获取 wmi 对象 win32_process,然后将其放入名为“explorer.exe”的进程列表中,然后启动了许多 explorer.exe 实例。

答案1

我通过谷歌快速找到了这一点:

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

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

似乎按要求返回用户。您可能可以从那里继续。希望有所帮助。

答案2

使用 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 更好。

相关内容