Collections – Rechner, ohne xyz

Vor langer Zeit veröffentlichte ich schon einmal einen Artikel über „not in“-Collections (http://www.mssmsfaq.de/index.php?option=content&task=view&id=78). Da meine alte SMS-Webseite sicher schon längst in Vergessenheit geraten ist, möchte ich hier das Thema nochmals aufgreifen, da es manchmal doch noch zu Missverständnissen führt.

Eine Collection, die alle Rechner enthält, auf denen Software xyz installiert ist (oder analog auch ein Dienst in einem gewissen Status ist, die alle Rechner vom Hersteller abc enthält, …) ist einfach.
Ein Beispiel dafür ist die Sammlung „Alle Rechner mit Forefront Client“:

select SMS_R_SYSTEM.ResourceID from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceId = SMS_R_System.ResourceId where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = „Microsoft Forefront Endpoint Protection 2010“

Bis hierher also überhaupt kein Problem.

Leider aber funktioniert es nicht, den „Operator“ von „is equal to“ auf „is not equal to“ zu ändern!

Stattdessen muss man folgenden Weg gehen, um alle Rechner ohne Forefront zu erhalten: man nimmt alle Rechner und zieht die Rechner ab, auf denen Forefront installiert ist. Übrig bleiben also die, auf denen Forefront nicht installiert ist. Eigentlich logisch!

Die Rechner, auf denen Forefront installiert ist, kennen wir ja schon. Siehe dazu die WQL-Query weiter oben im Artikel. Hier kommt das „Subselect / not in“-Konstrukt in’s Spiel:

 

Dabei wird im Subselect einfach die Query verwendet, die wir bereits erstellt haben und kennen (alle Rechner MIT Forefront).
Die resultierende Abfrage lautet also:

select SMS_R_SYSTEM.ResourceID from SMS_R_System inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM.ResourceID not in (select SMS_R_SYSTEM.ResourceID from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceId = SMS_R_System.ResourceId where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = „Microsoft Forefront Endpoint Protection 2010“).

Einfach – aber trotzdem verwirrend? Keine Angst. ConfigMgr 2012 bietet auch hier eine Verbesserung an. Denn neben „Query Rules“ und „Direct Rules“ (die es beide ja schon in ConfiMgr 2007) gibt sind zwei neue „Rule Types“ hinzugekommen: „Include“ und „Exclude“:

Ein Gedanke zu „Collections – Rechner, ohne xyz

  1. ben

    Hi Torsten,

    vielen dank für die „aktualisierte“ Erklärung, ich hatte ja schon ein paar mal das vergnügen 🙂

    Danke!
    Ben

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.