Как получить память (частный рабочий набор) для каждого пользователя в powershell

Я пытаюсь получить использование памяти процессом для каждого пользователя (например, диспетчер задач), эта информация поступает в память (частный рабочий набор), если мы преобразуем эти значения в МБ, мы должны получить использование памяти, как в представлении пользователей в задаче управляющий делами...

Может быть, я что-то упустил, если кто-то знает об этом, пожалуйста, сообщите мне.

А это мой сценарий

Get-WmiObject Win32_Process | Sort-Object -Property privatememorysize -Descending | 
Select processname, @{Name = "Mem Usage(MB)";Expression = {[math]::round($_.privatememorysize/ 1mb,2)}},@{Name = "UserID";Expression = {$_.getowner().Domain+"\"+$_.getowner().user}} | fl *
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 331
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема в том, что у класса Win32_Process нет свойства с именем «privatememorysize». Вместо этого, заменив его на «privatepagecount», все будет работать так, как ожидалось.

Get-WmiObject Win32_Process | Sort-Object -Property privatepagecount -Descending | 
    Select processname, @{Name = "Mem Usage(MB)";Expression = {[math]::round($_.privatepagecount/ 1mb,2)}},@{Name = "UserID";Expression = {$_.getowner().Domain+"\"+$_.getowner().user}}

Я вижу, это не одно и то же, поэтому у нас есть проблема, когда объект WMI не предоставляет частный рабочий набор, а другие методы, которые включают, не имеют пользователя. Итак, что мы можем сделать, так это использовать Get-Process, чтобы получить каждый процесс и частный рабочий набор, и использовать Get-WMIObject, чтобы связать пользователя с каждым объектом, а затем сопоставить их. Вероятно, лучше всего создать хеш-таблицу из одной ссылки, а затем использовать ее для добавления свойства к другому объекту. Итак, давайте сделаем это!

#Get WMI Process objects
$WMIProcs = Get-WmiObject Win32_Process
#Get Get-Process object
$GPProcs = Get-Process
#Convert Get-Process objects to a hashtable for easy lookup
$GPHT = @{}
$GPProcs | ForEach-Object {$GPHT.Add($_.ID.ToString(),$_)}
#Add PrivateWorkingSet and UserID to WMI objects
$WMIProcs|ForEach-Object{ 
    $_ | Add-Member "Mem Usage(MB)" $([math]::round($GPHT[$_.ProcessId.ToString()].PrivateMemorySize64/1mb,2))
    $_ | Add-Member "UserID" $($_.getowner().Domain+"\"+$_.getowner().user)
}
#Output to screen
$WMIProcs | Format-Table ProcessName, "Mem Usage(MB)", UserID
PrivatePageCount — это количество страниц памяти. Округление для получения МБ, вероятно, будет неточным.
Rich Moss 28.05.2019 20:56

который должен был закрыться, результат был.. Процесс блокнота в сценарии = 28144 КБ ..... Процесс блокнота в диспетчере задач (подробное представление, столбец: частный рабочий набор) = 22016 КБ, результат, который мне нужно получить, это значение в представление пользователей

Wilmer Vasquez D. Leon 28.05.2019 21:11

нет способа получить значение этого столбца?

Wilmer Vasquez D. Leon 28.05.2019 21:18

Хорошо, получить значение из этого столбца возможно, но не тривиально. Я обновил свой ответ, чтобы получить нужные вам данные.

TheMadTechnician 29.05.2019 00:48
Ответ принят как подходящий

Попробуйте использовать WorkingSetSize вместо PrivateMemorySize.

Get-WmiObject Win32_Process | Sort-Object -Property WorkingSetSize -Descending | 
Select processname, @{Name = "Mem Usage(MB)";Expression = {[math]::round($_.WorkingSetSize / 1mb,2)}},@{Name = "UserID";Expression = {$_.getowner().Domain+"\"+$_.getowner().user}} | FL

Мне нужны значения в частном рабочем наборе памяти столбца, это значение, которое мы видим в представлении пользователей в диспетчере задач, если я использую Worksetsize, значения, которые у меня есть, не совпадают

Wilmer Vasquez D. Leon 28.05.2019 21:16

Я не вижу никакого значения, которое соответствует Память (частный рабочий набор) в диспетчере задач, отображаемому как свойство Get-WmiObject Win32_Process или Get-Process. Однако Память - рабочий набор можно добавить в качестве столбца в диспетчер задач (Просмотр -> Выбрать столбцы), и он точно совпадает. Будет ли это работать для ваших нужд?

Rich Moss 28.05.2019 21:54

Вот Статья суперпользователя о несоответствии с хорошей связанной информацией.

Rich Moss 28.05.2019 21:58

я знаю, что рабочий набор дает мне точное значение, которое я получаю, что это не значение в диспетчере задач (просмотр пользователей) ... например, процесс Notepad ++ в сценарии = 28144 КБ, это если я использую WS ... .. Процесс Notepad ++ в диспетчере задач (детальный вид, столбец: частный рабочий набор) = 22016 КБ -> Если я конвертирую это в МБ (на 20 МБ больше или меньше), и эти 20 МБ - это то, что мне нужно, но я не знаю, как получить это

Wilmer Vasquez D. Leon 28.05.2019 23:36
эта статья упоминает, что диспетчер задач «на самом деле не дает вам правдивой информации о задаче, которую вы пытаетесь выполнить. И то, что показывает вам Диспетчер задач, — это не просто одно значение. Он делает некоторое дополнение под капотом и показывает вам композит». Если вы хотите быть ближе к личной памяти диспетчера задач, вы можете попробовать технику @TheMadTechnician или эта техника счетчика производительности.
Rich Moss 29.05.2019 00:34

Другие вопросы по теме