В Configuration Manager одной из сильных сторон является отчётная система, которая выводит информацию относительно последнего опроса клиентов, по умолчанию это происходит еженедельно. Встроенная в MECM программа CMPivot, имеет доступ к состоянию устройств в режиме реального времени. В ней можно составить запрос, который отправится на все подключенные машины выбранной группы и сразу получить результат, а также отфильтровать, сгруппировать и расширить\уточнить возвращенные данные. Разберёмся, как написать запрос и получить соответствующую информацию.

 

Принцип работы CMPivot

CMPivot соединяется с MECM-клиентами с применением "быстрого канала", который связывает сервер с клиентом, а также используется для уведомления клиентов, получения данных об их состоянии, защиты с помощью Endpoint Protection.

Если клиент находится в активном состоянии, то он сразу отвечает на запрос. С оффлайновых клиентов CMPivot может получить данные в течение 1 часа при условии, что программа не закроется, а компьютеры станут доступными и клиенты получат статус Active [https://docs.microsoft.com/ru-ru/sccm/core/servers/manage/cmpivot]. Все полученные результаты будут временно храниться в базе данных.

 

Места хранения данных

Представление - vSMS_CMPivotStatus - сообщает о состоянии заданий, запущенных из CMPivot, а именно: версию скрипта, с какого устройства и на скольких других машинах был запущен скрипт, количество недоступных клиентов. Информация для этого представления основана на трех таблицах (ClientAction, CMPivotResult, System_DISC) и двух представлениях (vSMS_ClientOperationStatus, vSMS_Scripts).

Второе представление - vSMS_CMPivotTask - имеет больше взаимосвязей, а именно: 9 таблиц (ClientActionSummary, ClientOperationResourceTarget, ClientOperationTarget, CMPivotResult, CollectionMembers, FnConvertBase64StringtoBinary, fnGetSiteNumber, fnlsCas, Scripts) и одно представление (vSMS_ClientOperationStatus), что в результате даёт больше сводной информации.

 

Работа с CMPivot

Интерфейс программы CMPivot разделен на 3 части. Слева расположена панель с объектами, посередине сверху – поле для написания запросов, а под ней – поле для отображения результатов.

Для работы с CMPivot должны быть права администратора или SMS_ScriptsRead = Yes и CollectionsRun Script = Yes.

Чтобы запустить CMPivot, нужно зайти в Asset and Compliance->Overview->Device Collections, на коллекции компьютеров нажать правой кнопкой мыши и выбрать пункт Start CMPivot.

CMPivot использует подмножество модели потока данных Azure Log Analytics. Запросы CMPivot очень похожи на запросы языка SQL. Совокупность клиентских сущностей и операторов разделяется “|”, представляя поток табличных данных слева направо. Каждый следующий оператор получает набор табличных данных от предыдущего, дополняет новыми наборами из тела оператора и передает дальше. Вся конструкция выглядит так:

сущность | оператор1 | оператор2 | ...

Пример1. Выведем список компьютеров с операционной системой Windows 10:

OS | where (version like ’10.%’)

Пример 2. Отобразим информацию с лог-файла ccmlog, где все строки начинаются со слова Execution или Execute. Запрос будет выглядеть так:

Ccmlog(‘Scripts’) | where (LogText like ‘Execut%’)

По завершению работы некоторых запросов полученную информацию можно использовать дальше, открыв контекстное меню: использовать поиск другой информации, запустить удалённый доступ, открыть Resource Explorer, выполнить скрипт PowerShell. Для примера выведем список компьютеров с определённым сервисом:

Service | where name like 'WinRM'

Следующий пример позволяет вывести версию файла. Такие действия могут быть полезны для поиска устройств, до которых обновление ещё не дошло или не применилось. Запрос будет выглядеть следующими образом:

File(‘%windir%\\system32\\cmd.exe’) | where (version > ‘8%’)

В CMPivot результаты работы запроса можно визуализировать с помощью Azure Log Analytics, будут доступны: гистограмма, столбчатая диаграмма, круговая диаграмма и временная диаграмма.

 

Пример 5. Отобразим последние использованные приложения с помощью гистограммы.

CCMRecentlyUsedApplications

| summarize dcount(Device) by ProductName

| top 10 by dcount_

| render barchart

 

Пример 6. Выведем все версии ОС Windows на круговой диаграмме.

OperatingSystem

| summarize count() by Caption  

| render barchart

Применять CMPivot можно и для получения информации о комплектующих компьютера, обращаясь к любому классу инвентаризации оборудования. CMPivot отображает как результаты последнего сканирования оборудования, вытянутые из базы данных, так и результаты с онлайн-клиентов. Если эти данные выводить графически, то столбики на графике будут иметь разные оттенки: темно-синий – данные получены в реальном времени, голубой – из базы данных.

 

Пример 7. Выведем информацию о логических дисках, свободном месте на них.

LogicalDisk

| summarize sum(FreeSpace) by Device

| order by sum_ desc

| render columnchart

Для получения информации об инвентаризации нужно учитывать несколько ограничений:

   - не поддерживаются некоторые сущности (свойства массива, например, IP-адрес, Real32/Real64, свойства встроенного объекта);  

   - имена сущностей должны начинаться с символа;

   - нельзя перезаписать встроенные сущности путём создания новых с тем же именем.

 

Troubleshooting

Работая с CMPivot, необходимо смотреть идентификатор запроса в правом нижнем углу программы и искать соответствия в лог-файлах, которые располагаются как на сервере (Smsprov.log, bgbserver.log, Statesys.log), так и на пользовательской машине (CcmNotificationAgent.log, Scripts.log, StateMessage.log).