Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于计算每个用户的内存使用率的PowerShell脚本_Powershell - Fatal编程技术网

用于计算每个用户的内存使用率的PowerShell脚本

用于计算每个用户的内存使用率的PowerShell脚本,powershell,Powershell,我们有一个240个虚拟机的环境。客户端正在使用ICA/RDP连接连接到这些服务器。有时用户会占用内存,导致特定服务器上的速度减慢和崩溃 我希望有一个PowerShell脚本来计算连接到服务器的每个用户的内存使用情况。我花了好几个小时搜索和尝试不同的脚本,但没有成功 一些脚本使用Get WmiObject Win32\u进程和GetOwner()为我提供工作集值。但计算结果并不正确 我需要的正是可以在任务管理器的“用户”选项卡中看到的格式。我需要的主要信息是内存使用情况,但最好能有每个用户的磁盘和

我们有一个240个虚拟机的环境。客户端正在使用ICA/RDP连接连接到这些服务器。有时用户会占用内存,导致特定服务器上的速度减慢和崩溃

我希望有一个PowerShell脚本来计算连接到服务器的每个用户的内存使用情况。我花了好几个小时搜索和尝试不同的脚本,但没有成功

一些脚本使用
Get WmiObject Win32\u进程
GetOwner()
为我提供工作集值。但计算结果并不正确

我需要的正是可以在任务管理器的“用户”选项卡中看到的格式。我需要的主要信息是内存使用情况,但最好能有每个用户的磁盘和CPU使用情况

这是我正在使用的代码。当我在一两分钟后运行此脚本时,它返回一个错误,表示找不到$.GetOwner(),在另一行中,它给了我一个用户名,该用户名比其他人更能利用内存,但当我将其与TaskManager用户选项卡进行比较时,计算不正确

$h = @{}
get-wmiobject win32_process | foreach { 
    $u = $_.getowner().user;
    if ( $u -ne $null)
    {
        if ( !$h.ContainsKey($u)  )
        {
            $h.add( $u, $_.WS);
        } 
        else 
        { 
            $h.item($u) = $h.item($u) + $_.WS;
        } 
    }
}  
$h.GetEnumerator() | sort value -desc
试试这个:

get-wmiobject win32_process | 
    select @{N='User';E={$_.getowner().user}}, WorkingSetSize  |
        group user | 
            select Name, @{N='CPU';E={($_.Group.WorkingSetSize  | Measure-Object -Sum).Sum / 1Mb  }}

向我们展示代码并解释计算是如何不正确的。谢谢你的回复,请检查我帖子上的代码。谢谢世界语57。这很好,我对它做了一些修改,以显示单个用户的最高内存使用率。
gwmi win32_process | 
    select @{N='User';E={$_.getowner().user}},WorkingSetSize | 
        group User | select Name,@{N='RAM';E={[math]::Round(($_.Group.WorkingSetSize | Measure-Object -Sum).Sum/1MB) }} | 
            sort RAM -Descending | select -first 1 ;