Une question sur le Reddit r/scom a récemment retenu mon attention : comment récupérer de manière récursive toutes les alertes actives pour les membres d’un groupe ainsi que pour les membres de ces membres à l’aide d’une requête SQL, pour pouvoir ensuite insérer le résultat dans un rapport.
La question peut paraitre compliquée mais il existe une table native dans la base OperationsManager qui va permettre une réponse triviale : dbo.RecursiveMembership.
Comme son nom l’indique, cette table contient de manière récursive tous les objets contenus dans un autre objet ainsi que leurs descendants, avec une indication de la profondeur (Depth) d’appartenance:

Il suffit donc de réaliser une simple jointure INNER JOIN entre la table AlertView et la table RecursiveMembership puis de spécifier une clause WHERE basée sur l’Id du groupe parent et le tour est joué!
/****** Change the group display name ******/
DECLARE @GroupDisplayName AS VARCHAR(255) = 'Your Group display name'
SELECT *
FROM AlertView
INNER JOIN dbo.RecursiveMembership AS RM
ON AlertView.MonitoringObjectId = RM.ContainedEntityId
WHERE ((RM.ContainerEntityId = (SELECT BaseManagedEntityId FROM dbo.BaseManagedEntity WHERE DisplayName = @GroupDisplayName)))

0 commentaires