Вопрос или проблема
Я пытаюсь создать кастомный отчет в 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, чтобы собрать необходимые данные.
Основные таблицы и представления для запроса
- v_DeploymentSummary — содержит сводные данные о развертывании обновлений.
- v_ClientCollectionMembers — хранит информацию о членах коллекции, включая идентификаторы ресурсов.
- v_CIAssignments — содержит информацию о назначениях обновлений для разных устройств.
- v_AssignmentStatePerTopic — предоставляет состояние конкретных назначений для топиков (в данном случае — обновлений).
- 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: Сортировка по имени устройства, имени назначения и другим полям для улучшенной читаемости итогового результата.
Заключение
С помощью этого запроса вы сможете получить отчет о соответствии обновлений для каждого устройства в выбранной коллекции. Это значительно упростит вашу задачу по мониторингу статуса обновлений. Если у вас есть дополнительные вопросы или уточнения, не стесняйтесь задавать!