воскресенье, 28 июня 2015 г.

Подсчет суммарного потребления памяти по пользователям на PowerShell

Возникла потребность узнать, кто из пользователей "выедает" больше оперативки на терминальнике.
Получился вот такой скрипт.
Отказ от ответственности чтобы прикрыть себе задницу ;)
1. Я не программист
2. Приоритетом была читабельность кода, а не его лаконичность
# подсчет выделенной памяти по пользователям
# полезно для териминальников


# получаем таблицу соответствия user_id и UserName
$owners = @{}
gwmi win32_process -ErrorAction SilentlyContinue |% {$owners[$_.handle] = $_.getowner().user}


# получаем список процессов и добавляем туда username
$Process_List = (get-process | select cpu,pm,vm,ws,processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}})

# можно отфильтровать по конкретному приложению
# в моем случае интересовало потребление памяти хромом
$Process_List = ($Process_List | where {$_.Processname -eq "chrome"} )

# групируем список по Owner
$Process_Group_By_Owner = ($Process_List | select cpu,pm,vm,ws,processname,Id,Owner | Group-Object -Property Owner)

# добавляем сортировку, приводим к удобным единицам измерения, округляем до 1 знака после запятой
$Process_Group_By_Owner | select Name, @{l="Mem"; e={($_.Group | Measure-Object -Sum WS | Select-Object -expandProperty Sum )}} | Sort-Object -Property Mem -Descending | select Name,@{l="MemGB";e={[math]::Round(($_.Mem/1GB),1)}} | ft -AutoSize

Комментариев нет:

Отправить комментарий