Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » WMI - [решено] Запрос на колличество используемой RAM.

Ответить
Настройки темы
WMI - [решено] Запрос на колличество используемой RAM.

Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: rudimko
Дата: 22-11-2015
Уважаемые друзья, в WMI опыта практически нет, поэтому обращаюсь к вам за помощью...
Помогите для системы мониторинга написать сценарий-запрос через WMI или Powershell на выдачу результата по используемой RAM (используемая память) в Mb. Использовал бы готовые значения по свободной RAM, но т.к. RAM динамическая, эти значения не несут требуемого смысла.
Заранее спасибо!

Отправлено: 13:34, 22-11-2015

 

Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


PowerShell:
Код: Выделить весь код
[int] $total += (gwmi win32_physicalmemory).capacity | foreach { $_ / 1mb }
[int] $free = (gwmi Win32_PerfFormattedData_PerfOS_Memory).availablembytes
$used = $total - $free

'Всего {0} Mb' -f $total
'Использовано {0} Mb' -f $used
'Свободно {0} Mb' -f $free
Не проверялось в случае нескольких плашек памяти.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:59, 22-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Не проверялось в случае нескольких плашек памяти. »
Здорово. Плашка как бы одна (это виртуальная машина).
Правильно ли я понимаю, что не зависимо от того, что динамическая память будет расти или наоборот уменьшаться, то значение USED все равно будет правильным?

Выдает ошибку при сложении чисел:
Код: Выделить весь код
'Свободно {0} Mb' -f $free
Не удается преобразовать значение "System.Object[]" типа "System.Object[]" в тип "System.I
nt32".
строка:1 знак:1
+ [int] $total += (gwmi win32_physicalmemory).capacity | foreach { $_ / 1mb }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException
 
Сбой вызова метода из-за отсутствия в [System.Object[]] метода с именем "op_Subtraction".
строка:3 знак:1
+ $used = $total - $free
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Subtraction:String) [], RuntimeExcept 
   ion
    + FullyQualifiedErrorId : MethodNotFound

Последний раз редактировалось rudimko, 22-11-2015 в 15:22.


Отправлено: 15:12, 22-11-2015 | #3


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


rudimko, Виртуалка? Тогда посмотрите в сторону этих классов:
Код: Выделить весь код
Win32_PerfFormattedData_BalancerStats_HyperVDynamicMemoryVM
Win32_PerfRawData_BalancerStats_HyperVDynamicMemoryVM
Win32_PerfFormattedData_Counters_HyperVDynamicMemoryIntegrationService
Win32_PerfRawData_Counters_HyperVDynamicMemoryIntegrationService
Или с помощью get-counter:
Код: Выделить весь код
# Посмотреть список счетчиков:
(get-counter -list 'Виртуальная машина с динамической памятью Hyper-V').counter
# Посмотреть конкретный счетчик
get-counter -counter '\Виртуальная машина с динамической памятью Hyper-V\Физическая память'
Сам этого сделать не могу (за отсутствием виртуальных машин)

Отправлено: 15:37, 22-11-2015 | #4


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
rudimko, Виртуалка? »
Да. В принципе самый первый вариант судя по всему будет работать, только числа не складывает, т.к. capacity имеет 2 значения. Посчитал на пальцах - все совпадает.
Код: Выделить весь код
[server]: PS C:\Users\user\Documents> (gwmi win32_physicalmemory).capacity | foreach { $_ / 1mb }
3968
28800
А этих каунтеров и классов на виртуалки у меня почему-то нет.

Последний раз редактировалось rudimko, 22-11-2015 в 15:51.


Отправлено: 15:43, 22-11-2015 | #5


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата rudimko:
Выдает ошибку при сложении чисел: »
Измените стрoку:
Код: Выделить весь код
(gwmi win32_physicalmemory).capacity | foreach { [int] $total += $_ / 1mb }
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:57, 22-11-2015 | #6


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
(gwmi win32_physicalmemory).capacity | foreach { [int] $total += $_ / 1mb } »
Спасибо!

Отправлено: 16:06, 22-11-2015 | #7


Пользователь


Сообщения: 126
Благодарности: 3

Профиль | Отправить PM | Цитировать


Спустя время обнаружилось:
Код: Выделить весь код
(gwmi -ComputerName $host win32_physicalmemory).capacity | foreach { [int] $total += $_ / 1mb }
Этот запрос покажет минимальную ОЗУ выделенную для запуска, в данном случае, виртуальной машины. Но если этот предел будет превышен и виртуальной машине будет выделено больше чем выделено за запуска, то этот запрос покажет тот же самый результат и раньше - минимальное кол-во ОЗУ, выделенное для запуска. =\ Следовательно и расчет, отталкиваясь от этого значения, будет неверным, к сожалению. =\

Отправлено: 14:43, 01-12-2015 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-WmiObject Win32_PerfFormattedData_PerfOS_NUMANodeMemory -Filter "Name='_Total'" | Foreach {$_.TotalMBytes - $_.AvailableMBytes}
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 01-12-2015 | #9


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Как вариант, вкупе с Invoke-Command задействовать рефлексию:
Код: Выделить весь код
$MEMORYSTATUSEX = ($$ = [Object].Assembly.GetType(
  'Microsoft.Win32.Win32Native'
)).GetNestedType(
  'MEMORYSTATUSEX', [reflection.BindingFlags]36
).GetConstructor(
  [Reflection.BindingFlags]36, $null, [Type[]]@(), $null
).Invoke($null)

if ($$.GetMethod(
  'GlobalMemoryStatusEx', [Reflection.BindingFlags]40
).Invoke($null, @($MEMORYSTATUSEX))) {
  $MEMORYSTATUSEX.GetType().GetFields(
    [Reflection.BindingFlags]36
  ) | ? {$_.Name -clike '*Phys'} | % {
    '{0} : {1:F2} Mb' -f $_.Name, ($_.GetValue($MEMORYSTATUSEX) / 1Mb)
  }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:05, 02-12-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » WMI - [решено] Запрос на колличество используемой RAM.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Ram-компьютер не запускаетcя при добавление 4 gb ram zveroboy13 Материнские платы и память 9 19-12-2012 00:42
CMD/BAT - [решено] Скопировать определенное колличество файлов WoW Скриптовые языки администрирования Windows 1 02-01-2012 09:36
[решено] Как влияет общее колличество установленных приложений на работу компьютера? dima1981 Хочу все знать 22 29-05-2009 02:12
Alg.exe колличество подключений Oput Microsoft Windows NT/2000/2003 0 27-09-2008 00:03
колличество часов музыки в медиаплеере (№10) Vlad Drakula Программное обеспечение Windows 9 20-12-2004 09:38




 
Переход