You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程获取Windows任务管理器「用户」标签页数据?

用PowerShell获取任务管理器「用户」标签页的资源数据

当然可以,你之前用Get-Process求和不对,核心是两个逻辑差异:

  • Get-Process的CPU属性是进程启动以来的累计CPU时间,不是任务管理器显示的实时使用率百分比
  • 任务管理器「用户」标签是按用户会话维度统计,要包含该会话下所有进程的实时资源占用,而非简单按用户名分组求和累计值

下面是匹配任务管理器展示逻辑的PowerShell实现:

核心思路

  1. 两次采样进程数据,通过时间差计算每个进程的实时CPU使用率
  2. 按用户名分组,统计每个用户的CPU使用率总和、内存占用总和
  3. 关联用户会话状态,还原任务管理器的展示字段

完整代码

# 第一次采样进程数据(记录初始CPU累计时间和内存)
$initialProcesses = Get-Process -IncludeUserName | Select-Object Id, UserName, CPU, WorkingSet64
# 等待0.5秒,让CPU累计时间产生可计算的差值
Start-Sleep -Milliseconds 500
# 第二次采样进程数据
$finalProcesses = Get-Process -IncludeUserName | Select-Object Id, UserName, CPU, WorkingSet64

# 获取系统逻辑CPU核心数,用于换算CPU使用率百分比
$totalLogicalCores = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors | Measure-Object -Sum | Select-Object -ExpandProperty Sum

# 计算每个进程的实时CPU使用率和内存占用
$processUsageData = foreach ($finalProc in $finalProcesses) {
    $initialProc = $initialProcesses | Where-Object { $_.Id -eq $finalProc.Id }
    if ($initialProc -and $finalProc.UserName) {
        # CPU使用率公式:(两次CPU时间差 / 时间间隔) / 总核心数 * 100
        $cpuTimeDiff = $finalProc.CPU - $initialProc.CPU
        $cpuUsagePercent = ($cpuTimeDiff / 0.5) / $totalLogicalCores * 100
        
        [PSCustomObject]@{
            UserName = $finalProc.UserName
            CPUUsage = [Math]::Round($cpuUsagePercent, 2)
            MemoryMB = [Math]::Round($finalProc.WorkingSet64 / 1MB, 2)
        }
    }
}

# 按用户名分组统计,并补充会话状态
$userResourceStats = $processUsageData | Group-Object UserName | ForEach-Object {
    # 获取用户会话状态
    $sessionState = (Get-CimInstance Win32_LogonSession | 
        Where-Object { $_.UserName -eq $_.Name } | 
        Select-Object -ExpandProperty Status -First 1) ?? "Unknown"

    [PSCustomObject]@{
        用户名 = $_.Name
        会话状态 = $sessionState
        总CPU使用率(%) = [Math]::Round(($_.Group.CPUUsage | Measure-Object -Sum).Sum, 2)
        总内存使用率(MB) = [Math]::Round(($_.Group.MemoryMB | Measure-Object -Sum).Sum, 2)
    }
}

# 格式化输出,和任务管理器展示逻辑一致
$userResourceStats | Format-Table 用户名, 会话状态, 总CPU使用率(%), 总内存使用率(MB) -AutoSize

补充说明

  • 内存统计用WorkingSet64,对应任务管理器的「内存(工作集)」;如果要匹配其他内存维度,可替换为PrivateMemorySize64(私有工作集)或VirtualMemorySize64(虚拟内存)
  • 两次采样的时间间隔可调整(比如改成1秒),间隔越长CPU使用率计算越稳定,但实时性会降低
  • 会话状态通过Win32_LogonSession获取,和任务管理器的「会话状态」字段匹配

内容的提问来源于stack exchange,提问作者tjlds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:40:20