Device Collections, Abfrage des Primary User und Active Directory Gruppe

Will man eine Collection dynamisch füllen, greift man auf eine Abfrageregel (Query Rule) zurück. Dabei werden WQL Abfragen erstellt, mit deren Ergebnis die Collection befüllt wird. Der Datenpool, auf den dabei zurückgegriffen wird, ist entsprechend des Collection Types, auf bestimmte Ressourcen Klassen eingeschränkt. So können bspw. bei einer Device Collection, nur die Daten der “System Resource” und “Unknown Systems” abgefragt werden.

Im Normalfall ist das auch passend, da die Device Collections nur Devices enthalten dürfen und umgekehrt.

Soll jetzt eine Device Collection gefüllt werden bei deren Filterkriterien Daten eines zugeordneten primären Benutzers, wie zum Beispiel die Mitgliedschaft einer Active Directory Gruppe, abgefragt werden, kommt man mit der Abfrage nicht weit. Denn die benötigten “User Resource” oder “User Group Resource” stehen in der Device Collection nicht zur Verfügung.

Wie man dennoch zum Ergebnis kommt, möchte ich in diesem Post erläutern.

Zunächst schauen wir uns die Abfrage näher an.

Wir benötigen die folgenden Attribut Klassen:

  • SMS_R_System
  • SMS_R_User 
  • SMS_UserMachineRelationship

Die Attribute Klasse SMS_UserMachineRelationship steht im Query Designer nicht zur Auswahl, deshalb müssen wir die WQL selbst zusammen bauen:

Select
SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.Client
from SMS_R_System
JOIN SMS_UserMachineRelationship ON SMS_R_System.Name=SMS_UserMachineRelationship.MachineResourceName
AND SMS_UserMachineRelationship.isActive <> 0
JOIN SMS_R_User ON SMS_UserMachineRelationship.UniqueUserName=SMS_R_User.UniqueUserName

Mit dieser Abfrage bekommen wir eine Liste aller Devices, die mit einem Benutzer in Relation stehen. Dabei werden aber auch die “nicht primären Relationen” mit berücksichtigt. Das heißt, dass die Devices keinen “Primary User” zugeordnet haben müssen. Um diesen kleinen aber wichtigen Unterschied, in das Abfrageergebnis einfließen zu lassen, muss die Abfrage um einen Filter erweitert werden:

where SMS_UserMachineRelationship.Types=1

Jetzt werden im Ergebnis der Abfrage nur die Devices zurückgeliefert, die auch einen Primary User zugeordnet haben.

Eingangs wollten wir eine Liste mit Devices, die gefiltert wird, aufgrund einer Mitgliedschaft, des zugeordneten primären Benuters, in einer bestimmten Active Directory Gruppe. Also bekommt unsere Abfrage noch einen weiteren Filter:

where 
SMS_UserMachineRelationship.Types=1
AND SMS_R_User.UniqueUserName in ("LAB\\LAB_UserGroup")

Damit ist die Abfrage komplett und wir können eine Query Rule erstellen.

Der Haken bei der Eingangs erwähnten Einschränkung der Collection Types auf die Resource Classes, kommt jetzt wieder zum Tragen. Denn geben wir die Abfrage in die Query Rule ein und wollen den Assistenten beenden, erscheint diese Fehlermeldung:

“The specificed resource class does not match the current collection type.”

Über diesen Weg können wir die Abfrage also nicht in der Collection nutzen. Aber es gibt einen anderen Weg. Ein Schritt zurück, die Abfrage (WQL) ist vollständig und wir speichern unsere Abfrage zunächst als eine neue Query, unter \Monitoring\Overview\Queries.

query_designerHier tritt kein Fehler beim Schließen des Assistenten auf und die Query liefert auch das gewünschte Ergebnis zurück.

Jetzt wieder zurück zur Device Collection, in den Assistenten zum Erstellen einer Query Rule. Diesmal erstellen wir keine neue Abfrage, sondern importieren die gerade erstellte Query und der Assistent wirft diesmal keine Einwände dagegen.

Die Device Collection füllt sich jetzt mit den Devices, denen ein primärer Benutzer zugeordnet ist und dieser Mitglied der genannten Active Directory Gruppe ist.

Leave a Reply

Your email address will not be published. Required fields are marked *