По-видимому, в платформе .NET есть ошибка, которая не позволяет точно определить значения рабочего набора выше 2 ГБ. Между 2 и 4 ГБ можно применить некоторые вычисления xor-ing для получения значения, но нет средств для получения значений рабочего набора более 4 ГБ (с использованием .Net или WMI)
Какой метод можно использовать - предпочтительно из сценария PowerShell - для получения точного измерения рабочего набора процесса, когда рабочий набор превышает 4 ГБ?
(некоторые подробности можно найти в этот вопрос StackOverflow)
Я знаю, что это старый вопрос, но он все еще жив, это показывает реальное использование 64-битной памяти в PowerShell:
get-process $ Processname -computername $ Computername | ft Имя, ID, VirtualMemorySize64, PeakVirtualMemorySize64, WorkingSet64, PeakWorkingSet64
и это показывает использование памяти через gps | где {$ _. workingset64 -gt 4000Mb} | ft name, pm, workingset64, id
Это для наблюдения за конкретным процессом:
"\Process(<process name>)\Working Set" | get-counter -computer <computer>
Выходные данные представлены в байтах, но вы можете преобразовать их в ГБ с помощью следующей команды:
"\Process(<process name>)\Working Set" | get-counter -computer <computer>
| ForEach {$_.CounterSamples} | ForEach {[math]::round($_.cookedvalue/1GB,2)}
Редактировать: Читая сообщение SO, я вижу, что вы пытаетесь просто получить любые процессы размером более 4 ГБ, не передавая конкретный процесс скрипту. Ниже приведен сценарий, который сделает это, а вот ссылка на Статья в блоге Scripting Guy это объясняет, как использовать Get-Counter
командлет:
"\Process(*)\Working Set" | Get-Counter -computer <computer>
| ForEach {$_.CounterSamples} | ? {$_.cookedvalue -gt 4294967296} | ft -AutoSize