Вопрос по WMI

Paha_DD
Отправлено: 12.11.15 10:46

Доброго времени суток,
понадобился вот нам монитор загрузки ОЗУ на ПК пользователей в процентном соотношении, типа как ЦПУ или файл подкачки через WMI, единично как я понял ОЗУ можно мониторить, зная исходный объём ОЗУ. Хотелось бы загнать в этот тип мониторинга всю карту, если есть возможность, напишите пожалуйста текст WQL-запроса для мониторинга по-процентного соотношения загрузки ОЗУ через WMI, заранее спасибо

пример : оповещение в случаи задействования ОЗУ на ПК пользователя свыше 90%

Комментарии

  • К сожалению, не удалось найти загрузку памяти в процентах в параметрах WMI. А арифметические операции язык запросов WQL не поддерживает. Поэтому с помощью проверки WMI не получится сделать мониторинг загрузки памяти в процентах. Однако есть другой способ, который мы нашли и проверили.

    Используйте проверку VBScript.
    В поле скрипта поместите следующий код:

    function Main

    arrComputers = Array("localhost")
    For Each strComputer In arrComputers
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem",,48)
    For Each objItem in colItems
    LoadMemory = (int(objItem.TotalVisibleMemorySize) - int(objItem.FreePhysicalMemory))/int(objItem.TotalVisibleMemorySize)*100
    If LoadMemory < 60 Then Main = "OK" else Main = "FAIL"
    Next
    Next
    end function


    Скрипт так же получает данные через WMI и выполняет арифметические операции.
    Однако, эта проверка пока может возвращать только два значения - OK и не OK. Поэтому сравнение с пороговым значением так же необходимо выполнять внутри скрипта.
    Порог срабатывания задается в строке

    LoadMemory < 60

    Это значит, что загрузка памяти до 60% является нормальной и проверка будет считаться пройденной.
  • Да, и не забудьте в строке arrComputers = Array("localhost") задавать адрес удалённого компьютера, если хотите мониторить память на других хостах

  • Спасибо, оповещение на e-mail и при arrComputers = Array("localhost") приходит с именем хоста (имя с карты), проверенно на 2х ПК.
  • Да, потому что программе всё равно, какой хост указан в скрипте - ей важен только результат скрипта. А в уведомлении используется непосредственно адрес хоста, для которого задана все проверка целиком. Просто если для каждого хоста не менять этот параметр в скрипте, то вы будете получать ложный результат - скрипт будет всегда работать для localhost - того компьютера, где запущена программа.
  • Спасибо понял,

    но вот, что получилось,(при наведении мышой к ПК на карте) VBScript: Ошибка выполнения скрипта: "Разрешение отклонено: 'GetObject'" , и вопрос как авторизацию провести, когда через скрипт мониторинг проходит? ПК в домене
    Тест естественно тоже не проходит при составлении проверки через скрипт, интернет политика предприятия не даёт прикрепить файлы/скриншоты на форуме....
  • PriCOOLisT

    пример : оповещение в случаи задействования ОЗУ на ПК пользователя свыше 90%

    Аналогичная ситуация и у меня: на сервере 1С есть процесс rphost.exe который может сожрать всю оперативную память. И если его вовремя не вышибить - сервак вешается наглухо.
    Создал проверку WMI с запросом select AvailableMBytes from Win32_PerfFormattedData_PerfOS_Memory, Проверка прошла, если значение поля AvailableMBytes больше 1024. Т.е. если на серваке памяти осталось меньше 1Гб, то проверка мне пришлёт смску с текстом типа "На серваке кончается память". Я тут же подключаюсь и прибиваю процесс.
  • Paha_DD

    to PriCOOLisT,
    так у вас, один сервак с фиксированным объёмом ОЗУ,а если их 10 (серваков) и все разные по железу, каждый руками конечно можно забить.
    Просто речь о том если ПК в принципе старенький, и там всего 1..2 гб,а есть и довольно таки свежие 32+ гб, то как их отслеживать всех разом
  • 'Разрешение отклонено: 'GetObject', насколько я понимаю, из-за неавторизованного доступа? Если так, то нужно просто выяснить, как в скрипте прописать логин/пароль. Попробуем у себя разобраться.
    Почитайте пока вот эту тему - там рассматривается аналогичная проблема: http://forum.script-coding.com/viewtopic.php?id=5540
    Возможно, у вас быстрее получится запустить.

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


    function Main

    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objSWbemLocator.ConnectServer("%A", "root\cimv2", "login", "password")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem",,48)
    For Each objItem in colItems
    LoadMemory = (int(objItem.TotalVisibleMemorySize) - int(objItem.FreePhysicalMemory))/int(objItem.TotalVisibleMemorySize)*100
    If LoadMemory < 90 Then Main = "OK" else Main = "FAIL"
    Next
    end function
  • спасибо. скрипт подходит, но ключ "%A" не подхватывается, работает только если вместо него подставить имя ПК или его IP адрес. "поштучно" можно забить такой монитор, но в больших масштабах не реально...
  • Если программа "Мониторинг Сети", то обновитесь до 4.2, с сайта. В LANState всё работает. Хотя и в "Мониторинге Сети" тоже работала. Проверьте еще раз и если не получится, пришлите пошаговые скриншоты (как делаете, что получается) нам на почту.
  • lanstate pro, выслать скриншоты нет возможности, закрытое предприятие
  • Понятно. Попробуйте тогда скачать последнюю версию и установить её дома- без регистрации 30 дней программа будет работать - хватит, чтобы попробовать разобраться. Дело в том, что у нас нормально значения подставляются. При тесте возможно нет, но при сохранении проверки адрес хоста туда прописывается. Только "A" должна быть английская.


    Мы проверили: да, действительно, при тесте скрипта ключ %A не работает. Однако, при сохранении проверки всё работает, как надо. Так что смело добавляйте эту проверку нескольким выделенным хостам.
    В тесте ошибку исправим.
Войдите или Зарегистрируйтесь чтобы комментировать.