You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动