如何在Windows Server 2016中用PowerShell获取指定用户的进程列表
获取Windows Server 2016中特定用户的进程列表
嘿,在Windows Server 2016上用PowerShell抓取特定登录用户的进程其实挺简单的,只要在Get-Process基础上做针对性过滤就行,我给你分几种常用场景说明:
场景1:获取当前登录的交互式用户进程
如果你要抓取的是自己当前登录会话的进程,直接用下面的命令就行:
# 获取当前登录用户的完整名称(格式:域名\用户名 或 本地机器名\用户名) $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name # 过滤出当前用户的进程 Get-Process -IncludeUserName | Where-Object { $_.UserName -eq $currentUser }
这里-IncludeUserName参数会让Get-Process返回进程所属的用户名,再通过Where-Object精准匹配当前用户,就能得到你要的进程列表。
场景2:获取指定用户名的进程
如果你已经知道目标用户的完整用户名(比如CORP\MikeBrown或者SERVER01\LisaWhite),直接替换成目标用户名即可:
# 替换成你要查询的目标用户名 $targetUser = "CORP\MikeBrown" # 过滤出目标用户的进程 Get-Process -IncludeUserName | Where-Object { $_.UserName -eq $targetUser }
要是不确定目标用户的完整格式,可以先运行下面的命令列出所有有进程的用户名,从中找到你要的:
Get-Process -IncludeUserName | Select-Object UserName -Unique
关键注意事项
- 管理员权限:部分系统进程或其他用户的受保护进程,需要以管理员身份运行PowerShell才能查看。如果发现有些进程没显示出来,右键PowerShell选择「以管理员身份运行」再试一次。
- 兼容旧环境:如果你的PowerShell版本意外低于5.1(Windows Server 2016默认是5.1,一般不会出现),
-IncludeUserName参数可能不可用。这时可以用WMI命令替代:
$targetUser = "CORP\MikeBrown" # 拆分用户名的域名和用户部分 $domain = $targetUser.Split('\')[0] $user = $targetUser.Split('\')[1] Get-WmiObject Win32_Process | ForEach-Object { $owner = $_.GetOwner() # 匹配域名和用户名 if ($owner.Domain -eq $domain -and $owner.User -eq $user) { # 返回进程名称、ID和所属用户名 $_ | Select-Object Name, ProcessId, @{Name='UserName'; Expression={"$($owner.Domain)\$($owner.User)"}} } }
内容的提问来源于stack exchange,提问作者Alpha Sniper




