Отчет SCCM: Соблюдение обновлений по устройству в коллекции

Вопрос или проблема

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

Что я хотел бы сделать, так это перечислить:

  • Коллекция устройств
    • Устройство
      • Группа обновлений программного обеспечения

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

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

Сейчас я нахожусь в консоли, иду в Мониторинг, Развертывания, затем для каждого Развертывания проверяю, какие машины соответствуют и т. д. Это своего рода обратное тому, что я ищу, и занимает больше времени, особенно когда я пытаюсь узнать, обновлена ли конкретная машина полностью или нет.

Мне удалось разобраться с запросом. Он немного сырой, но вот он для всех, кто пытается сделать то же самое:

SELECT d.CollectionID, d.CollectionName, m.Name, m.ResourceID, a.AssignmentName, a.AssignmentID, s.TopicType, s.StateID, n.StateDescription, s.StateTime
FROM v_DeploymentSummary d
inner join vCI_CIAssignments a on d.AssignmentID = a.AssignmentID
inner join v_ClientCollectionMembers m on m.CollectionID = d.CollectionID
left join (select * from v_AssignmentStatePerTopic where StateID = 1) s on a.AssignmentID = s.AssignmentID and m.ResourceID = s.ResourceID 
left join v_StateNames n on s.TopicType = n.TopicType and s.StateID = n.StateID
where d.CollectionName like '%windows server 2008 r2 - ga'
order by m.name, a.AssignmentName, d.CollectionName,s.AssignmentID

Я нашел статью SQL Server Views in System Center 2012 Configuration Manager, которая помогла, но все равно пришлось много копаться и экспериментировать.

Ответ или решение

Конечно! Давайте рассмотрим, как создать отчет в SCCM (System Center Configuration Manager), который покажет соответствие обновлений по устройствам в определенной коллекции. Вам удалось проделать большую работу, и ваш запрос уже выглядит неплохо, но давайте обсудим структуру для более полного решения и возможные улучшения.

Цель отчета

Как вы правильно отметили, ваша цель — получить отчет, показывающий статус соблюдения для каждого программного обновления по отдельным устройствам в заданной коллекции. Мы будем использовать представления в базе данных SCCM, чтобы собрать необходимые данные.

Основные таблицы и представления для запроса

  1. v_DeploymentSummary — содержит сводные данные о развертывании обновлений.
  2. v_ClientCollectionMembers — хранит информацию о членах коллекции, включая идентификаторы ресурсов.
  3. v_CIAssignments — содержит информацию о назначениях обновлений для разных устройств.
  4. v_AssignmentStatePerTopic — предоставляет состояние конкретных назначений для топиков (в данном случае — обновлений).
  5. v_StateNames — содержит описания состояний, которые помогут интерпретировать результаты.

Запрос для отчета

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

Вот доработанный пример вашего запроса:

SELECT 
    coll.CollectionID, 
    coll.CollectionName, 
    device.Name AS DeviceName, 
    device.ResourceID, 
    assignment.AssignmentName, 
    assignment.AssignmentID, 
    updateState.TopicType, 
    updateState.StateID, 
    stateDesc.StateDescription, 
    updateState.StateTime
FROM 
    v_DeploymentSummary coll
INNER JOIN 
    v_CIAssignments assignment ON coll.AssignmentID = assignment.AssignmentID
INNER JOIN 
    v_ClientCollectionMembers device ON device.CollectionID = coll.CollectionID
LEFT JOIN 
    (SELECT * FROM v_AssignmentStatePerTopic WHERE StateID = 1) updateState 
    ON assignment.AssignmentID = updateState.AssignmentID AND device.ResourceID = updateState.ResourceID 
LEFT JOIN 
    v_StateNames stateDesc ON updateState.TopicType = stateDesc.TopicType AND updateState.StateID = stateDesc.StateID
WHERE 
    coll.CollectionName LIKE '%YOUR_COLLECTION_NAME%'
ORDER BY 
    device.Name, assignment.AssignmentName, coll.CollectionName, assignment.AssignmentID

Объяснение запроса

  • SELECT: Мы выбираем нужные поля, чтобы идентифицировать устройства и их состояние compliance.
  • INNER JOIN: Мы соединяем таблицы, относящиеся к развертыванию и коллекции, чтобы получить данные только для заданной коллекции.
  • LEFT JOIN: Используем LEFT JOIN для получения статуса установки обновлений (при этом статус может отсутствовать, поэтому LEFT JOIN позволяет не пропускать устройства без обновлений).
  • WHERE: Здесь вы можете указать имя коллекции, с которой хотите работать. Замените '%YOUR_COLLECTION_NAME%' на имя вашей коллекции (например, '%Windows Server 2008 R2 - GA%').
  • ORDER BY: Сортировка по имени устройства, имени назначения и другим полям для улучшенной читаемости итогового результата.

Заключение

С помощью этого запроса вы сможете получить отчет о соответствии обновлений для каждого устройства в выбранной коллекции. Это значительно упростит вашу задачу по мониторингу статуса обновлений. Если у вас есть дополнительные вопросы или уточнения, не стесняйтесь задавать!

Оцените материал
Добавить комментарий

Капча загружается...