none
опрос WMI явно RRS feed

  • Вопрос

  • как можно считать WMI-данные, указав конкретный класс? в каком месте это можно указать? ведь СЦЦМ получает информацию именно таким образом. но многие поля в таблице, которые мне нужны, пустые, поэтому хотел бы указать явно. 
    3 декабря 2015 г. 10:04

Ответы

Все ответы

  • wmi explorer, начните с этого https://wmie.codeplex.com/, т.к. я не очень понял вопросов.

    3 декабря 2015 г. 10:28
    Модератор
  • Что за таблица? Силами сццм генерите?
    Можно опрашивать powershell-ом как вариант через Get-WmiObject, распространять скрипт и централизованно потом собрать репорт в виде csv как вариант
    3 декабря 2015 г. 10:38
  • Наберите в выполнить (Win + R) "wbemtest". Там нажмите кнопку "подключить". В пространстве имён укажите "root\cimv2". Там нажмите на кнопку "Запрос" и наберите, к примеру, "select * from Win32_OperatingSystem". Получите соответственно результаты, которые хранятся в данном классе.

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

    3 декабря 2015 г. 11:19
  • да, таблица генерится с помощью сццм и называется dbo.PRINTER_DEVICE_DATA. Её по умолчанию в БД нет, я включил её дополнительно для инвентаризации принтеров. В нет полей с данными о состоянии принтеров, которые он имеет: Ready, Offline, Error. В таблице есть другие состояния: Unknown, Degraded, Ok, Error, из которых первые 3 не понятно чему соответствуют. Вот я и хочу непосредственно с ПК считать эти состояния !! распространять ничего не нужно будет (например скрипт), считанную информацию нужно отобразить в ПХП-таблице.

    Скачал WMI Explorer (и WMI Tools), пересмотрел множество классов, но никаких полезных данных не нашёл. По смыслу вроде бы как мне нужен класс RSOP_PolmkrPrinterSetting или RSOP_PolmkrLocalPrinterSetting.

    Запустив "wbemtest" и вводя там имя класса, мне выдавались ошибки  invalid class.

    Имя принтера имеется, нужно считать его состояние!


    • Изменено serg_23 4 декабря 2015 г. 6:31 1
    4 декабря 2015 г. 6:27
  • Я думаю вам нужен не настройки принтера, а его статус PrinterStatus

    $s=gwmi Win32_Printer -Computername COMP
    $s.PrinterStatus

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa394363(v=vs.85).aspx


    Сазонов Илья

    https://isazonov.wordpress.com/


    4 декабря 2015 г. 7:53
    Модератор
  • Я думаю вам нужен не принтер, а очередь печати.

    Сазонов Илья

    https://isazonov.wordpress.com/

    в очереди печати выводится только цифры - количество листов, находящихся в очереди, но никак не состояние принтера.

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

    4 декабря 2015 г. 8:02
  • Я исправил предыдущее сообщение.

    Сазонов Илья

    https://isazonov.wordpress.com/

    4 декабря 2015 г. 8:33
    Модератор
  • всё равно вопрос остаётся открытым. не получается вывести мне состояние принтера !!

    смотрел в бд - основные данные по состоянию принтера (Готов) - пустые, тоже самое выдал и скрипт. скрин:

    а вот фото с состояниями, которые нужно выводить. как к ним достучаться???

    4 декабря 2015 г. 13:10
  • Вы смотрите Win32_PrintJob, а надо Wind32_Printer - на этот класс я вам выше давал ссылку.

    Сазонов Илья

    https://isazonov.wordpress.com/

    4 декабря 2015 г. 14:55
    Модератор
  • вот результат выполнения скрипта:
    4 декабря 2015 г. 17:31
  • И? Это то, что вам было нужно. По ссылке есть описание поля PrintStatus и расшифровка кодов.


    Сазонов Илья

    https://isazonov.wordpress.com/

    4 декабря 2015 г. 17:41
    Модератор
  • да, это то что нужно!! но опять мне не всё понятно. в расшифровке кодов есть описание соответствующего состояния. но в конце есть примечание:

    Note.  If you are retrieving PrinterStatus = 3 or PrinterState = 0, the printer driver may not be feeding accurate information into WMI. WMI retrieves the printer information from the spoolsv.exe process. It is possible the printer driver does not report its status to the spooler. In this case, Win32_Printer reports the printer as Idle.

    как раз у меня, наверное, 95% всех принтеров относятся к этом примечанию, PrinterStatus = 3 и PrinterState = 0.  и в таблице состояние Unknown.  НО где тогда состояние READY ?? 

    7 декабря 2015 г. 7:08
  • А если поюзать get-printer? Там все humanreadable. Правда в нужно иметь версию 3+
    7 декабря 2015 г. 7:54
  • А если поюзать get-printer? Там все humanreadable. Правда в нужно иметь версию 3+

    всё равно не получается, почему-то. пробовал и get-printer. почему-то Queued - пусто

    если использовать get-printjob, то надо указывать название принтера, то есть по конкретному принтеру вывод будет...

    7 декабря 2015 г. 9:46
  • Еще раз плз, какая инфа нужна для вывода?
    7 декабря 2015 г. 10:05
  • имя принтера и состояние (Ready, Offline, Error)
    7 декабря 2015 г. 10:28
  • (Get-Printer -ComputerName trali-vali.domain.local) | select PrinterStatus, Name

    PrinterStatus имеет значения Normal=Online

    Error, Offline

    PaperJam

    7 декабря 2015 г. 10:34
  • выводит то , что надо !! почему эта инфа не попадает в табл? как теперь эти данные можно засунуть в табл?
    7 декабря 2015 г. 11:27
  • А как вы до этого генерили табл?
    7 декабря 2015 г. 12:05
  • активировал галочки в defaultsettings->hardware inventory. появилbсь таблицы printer_device_data и другие. и всё, вычитываю данные из неё. к тому же SCCM-сервер стоит на вин2008 и роль сервера печати тоже настроена на вин2008, а на них get-printer не работает!!!  почему данные о состоянии не попадают в табл ?
    • Изменено serg_23 7 декабря 2015 г. 13:08 s
    7 декабря 2015 г. 12:15
  • да, это то что нужно!! но опять мне не всё понятно. в расшифровке кодов есть описание соответствующего состояния. но в конце есть примечание:

    Note.  If you are retrieving PrinterStatus = 3 or PrinterState = 0, the printer driver may not be feeding accurate information into WMI. WMI retrieves the printer information from the spoolsv.exe process. It is possible the printer driver does not report its status to the spooler. In this case, Win32_Printer reports the printer as Idle.

    как раз у меня, наверное, 95% всех принтеров относятся к этом примечанию, PrinterStatus = 3 и PrinterState = 0.  и в таблице состояние Unknown.  НО где тогда состояние READY ?? 

    В примечании всего лишь говорится о том, что драйвер может возвращать неправильное состояние. Вы сравните реальное состояние принтера и то, что возвращает командлет при опросе класса Win32_Printer

    Сазонов Илья

    https://isazonov.wordpress.com/

    7 декабря 2015 г. 15:07
    Модератор

  • почти все принтеры у меня в состоянии ГОТОВ и втечении дня печатают !! а в табл занесены состояния 3, которые не соответствуют. поэтому я хотел непосредственно с помощью wmi получить состояние, но теперь как его в бд поместить?? думал можно как-то в клиенте этот wql выполнить...  вдобавок там стоит вин2008. так что можно ещё предпринять?
    7 декабря 2015 г. 15:25
  • сопоставил данные. Всего установлено на принт-сервере 38 принтеров. из них по базе 6 - Degraded, 1 - Error. если посмотреть непосредственно на сервере, то так и получается, что 6 - Offline, 1 - Error, остальные - Unknown, которые можно отнести к Ready.
    8 декабря 2015 г. 5:36
  • ну так расширяйте классы инвентаризации, ключевые слова "sccm 2012 extend hardware inventory and collecting custom WMI classes".

    И собирайте ваши нолики и единички. ) После расширения классов, у вас будет создана вьюшка v_GS_имя_класса

    Только надо помнить, что эти данные у вас в базе будут актуальны только на момент выполнения цикла инвентаризации. ;) Я к тому, что данные не реалтайм, а частый запуск цикла сбора и отправки на точку управления, даст прирост сетевого трафика. 

    How to Extend Hardware Inventory in Configuration Manager - https://technet.microsoft.com/en-us/library/gg712290.aspx

    Using MOF Files - https://technet.microsoft.com/en-us/library/gg712290.aspx

    8 декабря 2015 г. 7:39
    Модератор
  • мне для успокоения души узнать бы

    1. у кого-то на вин2012 помещаются в бд состояния принтера Готов, Оффлайн, Ошибка ?? ведь Get-Printer не работает на Вин2008... может поэтому у меня почти всё UNKNOWN !!??

    10 декабря 2015 г. 6:38
  • Get-Printer хочет PowerShell v3 и далее, достаточно просто обновить фрэймворк
    10 декабря 2015 г. 10:43
  • обновил !!! не помогло !!
    10 декабря 2015 г. 11:06
  • то есть $Host.version выдает мажорную версию 3 и ничего не работает??
    10 декабря 2015 г. 12:56
  • то есть $Host.version выдает мажорную версию 3 и ничего не работает??

    потом и v4 поставил.и тоже самое. на вин2012 отрабатывает без проблем !!

    10 декабря 2015 г. 13:20
  • Судя по течнэтам в 2008 нету такого цмдлета. Набор команд на разных системах разный =/
    10 декабря 2015 г. 13:35
  • Командлет появился в версии 2012. Но у него есть параметр ComputerName - вы можете удаленно выполнять командлет.

    Посмотрите Неужели современный Powershell может управлять устаревшими системами?


    Сазонов Илья

    https://isazonov.wordpress.com/

    11 декабря 2015 г. 2:51
    Модератор