Ad Widget

Collapse

Проверка KMS-активации windows

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • iltmpz
    Junior Member
    • Oct 2012
    • 24

    #1

    Проверка KMS-активации windows

    Приветствую!
    У меня возникла потребность мониторить количество дней (или минут), оставшееся до окончания активации windows.
    На данный момент это мониторится очень корявыми скриптами, вызывающимися из планировщика windows. Хочется сделать красиво, с помощью zabbix.
    Чтобы опрашивались все хосты из определенного шаблона (windows старше XP) и сохранялось количество дней, если оно станет меньше критического, срабатывал бы триггер. Хочу раз в сутки получать значения.
    Удивлен, что не удалось нагуглить рабочих решений.

    Пока моя фантазия смогла родить такой однострочный .bat-файл:
    Code:
    For /F "tokens=5" %%a IN ('cscript C:\Windows\System32\slmgr.vbs -dlv ^| find "Срока истечения многопользовательской активации"') Do echo %%a
    Он выдает требуемое число.

    Что делать с ним дальше?
    Засовывать в каждый конфиг агента - команда отрабатывает за несколько секунд. Как я понимаю, заббикс предполагает получить ответ быстро. Опять же, не очень хочется править конфиг на каждом клиенте, если можно как-нибудь без этого обойтись.
    Засовывать этот скрипт опять-таки в планировщик на каждом хосте и передавать через zabbix_sender - еще менее привлекательный вариант.

    Подскажите, какие еще возможности заббикса есть, чтобы лучше всего применить их к моей задаче?

    Вот мой конфиг:
    Code:
    LogFile=c:\zabbix_agentd.log
    LogFileSize=1
    DebugLevel=3
    Server=zabbix3
    ServerActive=zabbix3
    HostnameItem=system.hostname
    HostMetadataItem=system.uname
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Несколько секунд - это сколько?
    Если не больше 30, то это не проблема. Запрос к пассивному агенту с установленным максимальным таймаутом, как мне кажется, нормальное решение для одного запроса в сутки.

    Comment

    • pzabortsev
      Senior Member
      • Dec 2012
      • 338

      #3
      Originally posted by iltmpz
      ... количество дней, если оно станет меньше критического, срабатывал бы триггер...
      А что вы хотите делать с этой информацией? Насколько я понимаю механизм kms, когда срок лицензии истечет, он просто выдаст новую, если у него есть свободные лицензии в запасе. Т.е. вы будете знать, что вот-вот станция будет по новой запрашивать лицензию? И что делать с этой информацией?

      Не поймите меня неправильно. Не хочу как-то потролить вас. Просто я тоже раздумываю над тем, как мониторить раздачу лицензий средствами kms. И у меня был взгляд в сторону мониторинга количества свободных лицензий на kms. Только я не знаю, как получить это количество...
      Last edited by pzabortsev; 13-02-2017, 16:47. Reason: Почему-то все KMS стали написаны мал&#

      Comment

      • iltmpz
        Junior Member
        • Oct 2012
        • 24

        #4
        Originally posted by sadman
        Несколько секунд - это сколько?
        Если не больше 30, то это не проблема. Запрос к пассивному агенту с установленным максимальным таймаутом, как мне кажется, нормальное решение для одного запроса в сутки.
        Спасибо, сделал пока как Вы посоветовали.
        Только тут еще пришлось колхозить костыль:
        Из-за русских букв в CP866 заббикс-агент с прописанным в него UserParameter не хочет запускаться. Есть какой-то вменяемый способ это обойти? Хотелось Всю строку проверки времени запихнуть прямо в UserParameter. Сейчас пришлось делать костыль в виде отдельного батника и раскидывать его по всем клиентам, подключая как:
        UserParameter=activation_remaining[*],"C:\Program Files\Zabbix\activation_remaining.bat" $1

        И еще 2 вопроса, наверно совсем уж оффтоп, но в рамках той же задачи:
        1. Если скрипт должен возвращать числовое значение, а он 1 раз возвратил пустую строку на одном из хостов, например, из-за сбоя, то элемент данных переходит в состояние "не поддерживается". Как его вернуть обратно в "Активировано"? Мне помогает удаление и пересоздание элемента данных для всего шаблона. Соответственно, значения обнуляются для всех клиентов. Не самое элегантное решение.
        2. Если этот скрипт вернул пустое значение, перешел в "не поддерживается", я хочу это дело отследить. Как это можно сделать? Хотел сделать через триггер nodata, но он вроде бы не срабатывает для некорректных значений.
        Не хочется колхозить в bat-файле еще и проверку возвращаемого значения на число-не число, иногда он может вернуть и ерунду. Тогда получается, оповещалка просто тихо умрет, перейдя в "не поддерживается" и никак меня об этом не оповестив?

        Originally posted by pzabortsev
        А что вы хотите делать с этой информацией? Насколько я понимаю механизм kms, когда срок лицензии истечет, он просто выдаст новую, если у него есть свободные лицензии в запасе. Т.е. вы будете знать, что вот-вот станция будет по новой запрашивать лицензию? И что делать с этой информацией?

        Не поймите меня неправильно. Не хочу как-то потролить вас. Просто я тоже раздумываю над тем, как мониторить раздачу лицензий средствами kms. И у меня был взгляд в сторону мониторинга количества свободных лицензий на kms. Только я не знаю, как получить это количество...
        Новую лицензию он выдаст при условии что сам сервер kms работает. А бывает (раньше во всяком случае было), что с kms что-то не то, в итоге клиенты перестают получать лицензии. В результате была внедрена колхозно-костыльная система на скриптах, планировщиках и почтах. А сейчас я ее хочу перенести на заббикс, хоть таких случаев и не было в последние пару лет...

        Вот какой получился батник:
        Code:
        @echo off
        rem скрипт для заббикса, универсальный для win и office, если что-то из этого не обнаружено, то возвращает большое значение. Например, на компах где нет офиса, заббикс будет получать ок.
        rem  если будет какой-то сбой, вернется пустое значение, заббикс это должен обработать как аварийную ситуацию. Обычно возвращает реальное кол-во времени до конца активации
        If -%1==-win goto WIN
        If -%1==-off goto OFF
        goto END
        :WIN
        If not exist C:\Windows\System32\slmgr.vbs goto END999999
        For /F "tokens=5" %%a IN ('cscript C:\Windows\System32\slmgr.vbs -dlv ^| find "Срока истечения многопользовательской активации"') Do @echo %%a
        goto END
        :OFF
        If not exist "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" goto END999999
        For /F "tokens=3" %%a IN ('cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS"  /dstatus ^| find "REMAINING GRACE:"') Do echo %%a
        goto END
        :END999999
        echo 999999
        :END

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Originally posted by iltmpz
          Из-за русских букв в CP866 заббикс-агент с прописанным в него UserParameter не хочет запускаться. Есть какой-то вменяемый способ это обойти?
          Насколько я помню, в документации говорилось, что для не-ASCII символов конфиг должен быть в кодировке UTF-8:
          Zabbix supports configuration files only in UTF-8 encoding without BOM.
          Соответственно, в этой кодировке его и нужно сохранить (хотя бы тем же notepad-ом, только BOM из начала файла чем-то потом вырезать, если он туда бдет добавлен).

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Originally posted by iltmpz
            1. Если скрипт должен возвращать числовое значение, а он 1 раз возвратил пустую строку на одном из хостов, например, из-за сбоя, то элемент данных переходит в состояние "не поддерживается". Как его вернуть обратно в "Активировано"? Мне помогает удаление и пересоздание элемента данных для всего шаблона. Соответственно, значения обнуляются для всех клиентов. Не самое элегантное решение.
            По-моему в конфиге сервера указывается время, в течении которого элемент не перезапрашивается, если он вылетел в ошибку. Но так, как у вас опрос раз в сутки, то восстановится он, как я думаю, на следующий день.


            Не хочется колхозить в bat-файле еще и проверку возвращаемого значения на число-не число, иногда он может вернуть и ерунду. Тогда получается, оповещалка просто тихо умрет, перейдя в "не поддерживается" и никак меня об этом не оповестив?
            Мне кажется, что всё это от продолжительных периодов опроса... Может таки почаще запросы делать?

            В принципе, в этом .vbs-е дергается wmi, можно, пожалуй зайти с этой стороны. Но придется потерять достаточно времени. Проще в батнике сделать проверку на валидность результата, который планируется передать.

            Еще один вариант - запускать батник/набор команд в logon script через GPO, а потом через zabbix-sender пушить на Zabbix. Тогда раскидывать ничего, в принципе, не нужно будет. И проблемы с CP866 в конфиге агента не уже будет.

            P.S. Вот, что у меня в 3.2 имеется: Administration -> General -> [V] Other configuration parameters -> Refresh unsupported items (in sec) [600]
            Last edited by sadman; 13-02-2017, 20:49.

            Comment

            • iltmpz
              Junior Member
              • Oct 2012
              • 24

              #7
              Originally posted by Kos
              Насколько я помню, в документации говорилось, что для не-ASCII символов конфиг должен быть в кодировке UTF-8:
              Да, это я тоже вчера нашел. Только вот проблема в том, что cscript выдает результат в консоль в кодировке CP866 (причем язык вывода переключить невозможно без колхоза - винда русская). Значит, find должен искать строку тоже в кодировке CP866. И в этом-то и беда: заббикс просто не хочет читать файл конфига, в не-UTF-8 кодировке, хотя казалось бы, какое ему дело...
              Есть еще опция у cscript //U - выдавать вывод в UNICODE, только работать с этим юникодом не умеет find. Не знаю, может быть, find'у как-нибудь можно искать строку по кодам символов вместо них самих, не нашел...

              Originally posted by sadman
              По-моему в конфиге сервера указывается время, в течении которого элемент не перезапрашивается, если он вылетел в ошибку. Но так, как у вас опрос раз в сутки, то восстановится он, как я думаю, на следующий день.



              Мне кажется, что всё это от продолжительных периодов опроса... Может таки почаще запросы делать?

              В принципе, в этом .vbs-е дергается wmi, можно, пожалуй зайти с этой стороны. Но придется потерять достаточно времени. Проще в батнике сделать проверку на валидность результата, который планируется передать.

              Еще один вариант - запускать батник/набор команд в logon script через GPO, а потом через zabbix-sender пушить на Zabbix. Тогда раскидывать ничего, в принципе, не нужно будет. И проблемы с CP866 в конфиге агента не уже будет.

              P.S. Вот, что у меня в 3.2 имеется: Administration -> General -> [V] Other configuration parameters -> Refresh unsupported items (in sec) [600]
              Сейчас для тестов я сделал период опроса 10 минут. И да, действительно нашел параметр: Обновление неподдерживаемых элементов данных (в сек): 600.
              И действительно, после того как скрипт "починился" - стал возвращать нормальные значения, заббикс его опять увидел.

              Кроме того, получил-таки "Timeout while executing a shell script.". Оказалось, что параметр задается в конфиге агента и по умолчанию 3 секунды. Поставил Timeout=30
              Обидно. Столько всего менять из-за ерунды.

              Раскидывать батник еще и через GPO (только тогда не в logon, а в крон на заданное время) - уж точно колхоз колхозный. Я-то поначалу надеялся вообще как-то на стороне заббикс-сервера поиграться, чтобы в клиента никак не лазить. Потом решил все же дописать один UserParameter на активацию вин и другой - на активацию офиса, потом пришлось туда и батник копировать, теперь еще и таймаут увеличивать, и все равно задача не решена до конца!

              Пока доработал батник: во-первых, в случае офиса у меня строка вывода задублировалась (одну убрал), а во-вторых, если вывод пустой, добавил вывод 0 вместо []. Однако все равно валидность недопроверена: если строка найдется, но не числовая, то элемент получит состояние "Не поддерживается".

              И самое неприятное - если будет состояние "Не поддерживается", то никаких уведомлений мне не приходит. Как мне их получить? Я пробую вот таким триггером:
              Code:
              {Template OS Windows:activation_remaining[win].nodata(20m)}=1
              Если 20 минут данных не было, то ругнуться. Но он не ругается, просто молча отключает элемент данных.

              А вот мой усовершенствованный батник:
              Code:
              @echo off
              rem скрипт для заббикса, универсальный для win и office, если что-то из этого не обнаружено, то возвращает большое значение. Например, на компах где нет офиса, заббикс будет получать ок.
              rem  если ожидаемая строка не обнаружена, скрипт вернет 0. Если ожидаемых строк несколько, скрипт вернет только одну из них.
              rem  В нормальных ситуациях скрипт возвращает реальное кол-во времени до конца активации
              If -%1==-win goto WIN
              If -%1==-off goto OFF
              goto END
              :WIN
              If not exist C:\Windows\System32\slmgr.vbs goto END999999
              For /F "tokens=5" %%a IN ('cscript C:\Windows\System32\slmgr.vbs -dlv ^| find "Срока истечения многопользовательской активации"') Do @set act_timeout=%%a
              If DEFINED %act_timeout goto ACT_TIMEOUT
              echo 0
              goto END
              :OFF
              If not exist "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" goto END999999
              For /F "tokens=3" %%a IN ('cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS"  /dstatus ^| find "REMAINING GRACE:"') Do @set act_timeout=%%a
              If DEFINED %act_timeout goto ACT_TIMEOUT
              echo 0
              goto END
              :ACT_TIMEOUT
              echo %act_timeout%
              goto END
              :END999999
              echo 999999
              :END

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Originally posted by iltmpz
                Раскидывать батник еще и через GPO (только тогда не в logon, а в крон на заданное время) - уж точно колхоз колхозный.
                Не раскидывать, а запускать прямо с административной шары. Это же нативное решение для AD. Тогда вообще агента можно не трогать. И, по-моему, если sender не пришлет данные вовремя, то как раз nodata отработает. Хотя, я не знаю - это у нас Kos мастер по этим всем изворотам с триггерами.

                Я-то поначалу надеялся вообще как-то на стороне заббикс-сервера поиграться, чтобы в клиента никак не лазить.
                Это не Windows way

                Comment

                • Semiadmin
                  Senior Member
                  • Oct 2014
                  • 1625

                  #9
                  Originally posted by iltmpz
                  Только вот проблема в том, что cscript выдает результат в консоль в кодировке CP866 (причем язык вывода переключить невозможно без колхоза - винда русская). Значит, find должен искать строку тоже в кодировке CP866. И в этом-то и беда: заббикс просто не хочет читать файл конфига, в не-UTF-8 кодировке, хотя казалось бы, какое ему дело...
                  [/CODE]
                  можно сохранить вывод скрипта в файл и прочитать его заббикс-агентом:
                  vfs.file.contents[<имя файла>,CP866]

                  Comment

                  • iltmpz
                    Junior Member
                    • Oct 2012
                    • 24

                    #10
                    Originally posted by sadman
                    Это не Windows way
                    Ну, заббикс тоже, насколько я понимаю, не пропитан духом windows-way. Мне бы объяснить агенту, чего я от него хочу, а дальше чтобы он сам, но вот все равно нагромождение получилось...

                    Originally posted by sadman
                    Не раскидывать, а запускать прямо с административной шары. Это же нативное решение для AD. Тогда вообще агента можно не трогать.
                    А потом думай, почему скрипт не сработал: то ли что-то в скрипте, то ли шара отвалилась, то ли сеть лагает, то ли еще что. Было уже, проходили...
                    А самое главное главное - агент заббикса ведь под локальной учеткой работает, в AD не сможет авторизоваться, и правильно: нечего ему в домене AD делать ради такой ерундовой задачи как мониторинг KMS.
                    Поэтому и хотел простой железобетонный однострочник, который запихнуть прямо в .conf, настроить все проверки на стороне сервера и забыть, но вот, не получается... Оказывается, сервер впадает в ступор при виде неожиданных данных, да и все равно надо проверять, есть на клиенте офис или нет. Если нет, то не проверять его. А значит, однострочник уже не получится.

                    Originally posted by sadman
                    И, по-моему, если sender не пришлет данные вовремя, то как раз nodata отработает. Хотя, я не знаю - это у нас Kos мастер по этим всем изворотам с триггерами.
                    Совершенно верно, если sender не пришлет данные вовремя, то nodata отработает, это мне как раз Kos уже объяснял в прошлый раз. Только вот в данном случае если данные будут неверные, то sender неверные данные и пришлет. И очень подозреваю, что эффект будет тот же: переход элемента данных в "не поддерживается". Поправьте если ошибаюсь.

                    Originally posted by Semiadmin
                    можно сохранить вывод скрипта в файл и прочитать его заббикс-агентом:
                    vfs.file.contents[<имя файла>,CP866]
                    Тогда в файле будет многострочный вывод, который надо будет каким-то образом парсить заббикс-сервером. Тогда уж гораздо лучше сохранить вывод не в файл, а прямо передавать серверу в виде текстового значения.
                    Кстати, не такой уж плохой вариант, если научите, как мне потом качественно парсить этот вывод и сохранять только нужное мне число.
                    Вывод выглядит примерно так:
                    Code:
                    Сервер сценариев Windows (Microsoft R) версия 5.8
                    Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.
                    
                    Версия службы лицензирования программного обеспечения: 1.1.1111.11111
                    
                    Имя: Windows XXXXXXXXXXXXXX
                    Описание: Windows Operating System - Windows Server(R), VOLUME_KMSCLIENT channel
                    Идентификатор активации: 11111111-1111-1111-1111-111111111111
                    Идентификатор приложения: 11111111-1111-1111-1111-111111111111
                    Расширенный PID: 11111-11111-111-111111-11-1111-1111.1111-1111111
                    Идентификатор установки: 111111111111111111111111111111111111111111111111111111
                    Частичный ключ продукта: XXXXX
                    Состояние лицензии: имеет лицензию
                    Срока истечения многопользовательской активации: 111111 мин. (111 дн.)
                    Оставшееся число возвращений к исходному состоянию активации Windows: 1
                    Доверенное время: 11.11.1111 11:11:11
                    
                    Сведения о клиенте службы управления ключами
                        Идентификатор клиентского компьютера (CMID): 11111111-1111-1111-1111-111111111111
                        Автообнаружение DNS: имя KMS отсутствует
                        Расширенный PID компьютера KMS: 11111-11111-111-111111-11-1111-1111.1111-1111111
                        Интервал активации (в мин.): 11111
                        Интервал обновления (в мин.): 11111
                        Кэширование узла KMS включено
                    Вот мне надо как-то из всего этого вытащить 5-й элемент строки "Срока истечения многопользовательской активации: 111111 мин. (111 дн.)".
                    Плюс, если скрипт вообще не найден, то чтобы возвращало что-то вроде 999999 (много дней, чтобы было ок),
                    а если скрипт найден, выполнен, но нет строки "Срока истечения многопользовательской активации:" или еще какая неожиданность, то чтобы возвращало ошибку (например, 0 дней, чтобы триггер активировался).
                    Можно каким-то образом решить такую задачу средствами заббикс-сервера?

                    АП: Ну вот, получил сюрприз:
                    после выставления на всех хостах timeout=30 - везде все нормально, а один клиент почему-то стал слать Zabbix agent is unreachable for 5 minutes и потом опять reachable, и так за всю ночь сообщений 200 насыпал. В чем дело - понятия не имею, убрал опцию таймаута, перезапустил - пока агент reachable, полет нормальный. Только ествественно kms-мониторилка теперь не работает на этом клиенте...

                    АП2: ответ насчет контроля некорректного значения и отлавливания перехода в состояние "не поддерживается" нашел в соседней теме: это невозможно.
                    Зато немного расширил свои познания в области бат-файлов, оказывается, там есть проверка на число.
                    Засим, делаю следующую версию своего батника, надеюсь, что финальную и на этом возню с kms-активацией заканчиваю:
                    Code:
                    @echo off
                    rem скрипт для заббикса, универсальный для win и office, если что-то из этого не обнаружено, то возвращает большое значение. Например, на компах где нет офиса, заббикс будет получать ок.
                    rem  если ожидаемая строка не обнаружена, скрипт вернет 0. Если ожидаемых строк несколько, скрипт вернет только одну из них.
                    rem  В нормальных ситуациях скрипт возвращает реальное кол-во времени до конца активации
                    If -%1==-win goto WIN
                    If -%1==-off goto OFF
                    echo 0
                    goto END
                    :WIN
                    If not exist C:\Windows\System32\slmgr.vbs goto END999999
                    For /F "tokens=5" %%a IN ('cscript C:\Windows\System32\slmgr.vbs -dlv ^| find "Срока истечения многопользовательской активации"') Do @set /A act_timeout=%%a 2> nul
                    If DEFINED %act_timeout goto ACT_TIMEOUT
                    echo 0
                    goto END
                    :OFF
                    If not exist "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS" goto END999999
                    For /F "tokens=3" %%a IN ('cscript "C:\Program Files (x86)\Microsoft Office\Office14\OSPP.VBS"  /dstatus ^| find "REMAINING GRACE:"') Do @set /A act_timeout=%%a 2> nul
                    If DEFINED %act_timeout goto ACT_TIMEOUT
                    echo 0
                    goto END
                    :ACT_TIMEOUT
                    echo %act_timeout%
                    goto END
                    :END999999
                    echo 999999
                    :END
                    Меня больше всего беспокоило, что винда может при некоторых условиях выдать что-нибудь вроде строки:
                    "Срока истечения многопользовательской активации: неизвестно", что привело бы к некорректному значению на входе заббикс, а именно это - одна из ситуаций, которые надо обрабатывать.
                    Ключ set /A позволяет как раз проверять, что это число. Вообще, надеюсь, теперь скрипт всегда возвращает 0 в случае любых непредвиденных ситуаций, так что триггер сработает.
                    Last edited by iltmpz; 15-02-2017, 12:47.

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #11
                      Боюсь, что вам PowerShell нужно в руку брать. В противном случае так и будете до конца жизни сращивать CMD и VBS. Всегда будут вылезать какие-нибудь уродские наросты.

                      Upd: Так же можно оригинальный VBS укоротить и использовать, как свой - только чтобы он выдавал одно число. Или что там необходимо...
                      Last edited by sadman; 15-02-2017, 13:33.

                      Comment

                      • Kos
                        Senior Member
                        Zabbix Certified SpecialistZabbix Certified Professional
                        • Aug 2015
                        • 3404

                        #12
                        Originally posted by iltmpz
                        Тогда в файле будет многострочный вывод, который надо будет каким-то образом парсить заббикс-сервером.
                        Вариант 1: сохранять в файл только нужную часть, прогоняя вывод конвейером через какой-нибудь findstr.exe;
                        Вариант 2: сохранять всё в многострочный файл, из которого читать потом нужную часть с помощью метрики
                        Code:
                        vfs.file.regexp[file,regexp,<encoding>,<start line>,<end line>,<output>]
                        Например:
                        Code:
                        vfs.file.regexp[C:\Путь\файл.tmp,"Срока истечения многопользовательской активации: ([0-9]+) мин",CP-866,,,\1]
                        Last edited by Kos; 15-02-2017, 14:21.

                        Comment

                        • sadman
                          Senior Member
                          • Dec 2010
                          • 1611

                          #13
                          Originally posted by Kos
                          Вариант 1: сохранять в файл только нужную часть, прогоняя вывод конвейером через какой-нибудь findstr.exe;
                          Вариант 2: сохранять всё в многострочный файл, из которого читать потом нужную часть с помощью метрики
                          Атомарности у операций нет. Т.е., конечно, можно надеятся, что файл будет обновляться, но... При сбое постоянно одно и то же корректное значение будет возвращаться. И этого не отловишь уже заббиксом.

                          В итоге всё в этом VBS сводится к этому:
                          Code:
                          private const ProductClass                            = "SoftwareLicensingProduct"
                          ...
                          g_objWMIService.ExecQuery("SELECT " & strSelect & " FROM " & ProductClass)
                          Потом уже начинается анализ возвращенных экземпляров. Т.е., потенциально, один правильно написанный WMI-запрос может решить задачу.

                          Comment

                          • sadman
                            Senior Member
                            • Dec 2010
                            • 1611

                            #14
                            PowerShell:

                            Code:
                            $WQL = "SELECT * FROM SoftwareLicensingProduct WHERE LicenseStatus = 1"
                            #$WQL = "SELECT GracePeriodRemaining FROM SoftwareLicensingProduct WHERE LicenseStatus = 1"
                            $Products = Get-WmiObject -computername . -NameSpace "ROOT\CIMV2" -Query $WQL;
                            $Products
                            #Write-Host $Products.GracePeriodRemaining
                            KMS-а у меня нет, поэтому проверить корректность не могу. Возможно, что $Products будет представлять собой коллекцию, поэтому потребуется дополнительный фильтр в запросе (WHERE). С моим Windows RETAIL key в коллекции только один объект.

                            This class exposes the product-specific properties and methods of the Software Licensing service.


                            Напоминаю, что Zabbix agent for Windows имеет ключ wmi.get[].

                            Comment

                            • Viewer
                              Senior Member
                              • Oct 2012
                              • 131

                              #15
                              Originally posted by iltmpz
                              И самое неприятное - если будет состояние "Не поддерживается", то никаких уведомлений мне не приходит. Как мне их получить? Я пробую вот таким триггером:
                              Code:
                              {template os windows:activation_remaining[win].nodata(20m)}=1
                              Если 20 минут данных не было, то ругнуться. Но он не ругается, просто молча отключает элемент данных.
                              Так и не увидел версию сервера.
                              С версии 3.2 это исправили.
                              enabled evaluation of function nodata() for not supported items
                              function nodata() will be normally evaluated even if a corresponding item is unsupported for some reason.

                              Comment

                              Working...