Guide pratique pour créer un regroupement dynamique

Dans Configuration Manager, votre application utilise la classe WMI du serveur SMS_Collection pour définir les attributs d’une collection, tels que les règles d’adhésion et la planification de l’actualisation. La MemberClassName propriété contient le nom de classe généré par le système qui contient les membres de la collection.

Les membres d’un regroupement sont spécifiés à l’aide de règles directes, de règles de requête ou des deux. Les règles directes définissent une ressource explicite, tandis que les règles de requête définissent une collection dynamique qui est évaluée régulièrement en fonction de l’état actuel du site.

Notes

Lorsque vous créez une règle d’adhésion directe, n’oubliez pas que la règle doit toujours avoir le même nom que l’ordinateur que la règle spécifie.

Votre application utilise la classe de classe WMI du serveur SMS_CollectionRuleQuery pour définir des règles de requête. La requête doit être valide et peut spécifier la collection pour contenir des ressources telles que « tous les utilisateurs dans le domaine de l’entreprise ». L’application peut ensuite utiliser la requête pour s’assurer qu’un programme est destiné à la distribution de logiciels à tous les ordinateurs qui répondent aux critères. Lorsque le site est modifié et que la collection est réévaluée, les membres du regroupement sont automatiquement ajoutés et supprimés.

Notes

Lors de l’exécution d’une requête sur une collection dynamique, assurez-vous que le fournisseur SMS est chargé ou qu’une autre méthode ou requête a déjà été exécutée.

Les collections sont étroitement liées aux packages, aux programmes et aux publications. Pour plus d’informations, consultez Présentation de la distribution de logiciels.

Ces exemples nécessitent des valeurs suivantes :

  • Un objet de connexion WMI (Windows Management Instrumentation).

  • Nouveau nom de collection dynamique.

  • Nouveau commentaire de collection dynamique.

  • Indicateur « possédé par ce site ».

  • Requête (chaîne).

  • Nom de règle statique.

  • Identificateur de collection pour limiter l’étendue de l’appartenance.

Notes

Si le regroupement tous les systèmes (SMS00001) a été supprimé du serveur de site, l’exemple VBScript ne fonctionne pas.

Exemple de l’appel de sous-routine dans Visual Basic :

Call CreateDynamicCollection(swbemconnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")  

Exemple de l’appel de méthode en C# :

CreateDynamicCollection(WMIConnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")  

Pour créer une collection dynamique

  1. Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez principes de base du fournisseur SMS.

  2. Créez le nouvel objet de collection à l’aide de la classe de classe WMI du serveur SMS_Collection .

  3. Créez la règle à l’aide de la classe de classe WMI du serveur SMS_CollectionRuleQuery .

  4. Ajoutez la règle à la collection.

  5. Actualisez la collection.

Exemple

L’exemple de méthode suivant crée une collection dynamique à l’aide de la classe WMI du serveur SMS_Collection et des classes de classe et des propriétés de classe WMI SMS_CollectionRuleQuery Server .

Pour plus d’informations sur l’appel de l’exemple de code, consultez Calling Configuration Manager Code Snippets (Appel d’extraits de code Configuration Manager).


' Setup a connection to the local provider.  
Set swbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set swbemconnection= swbemLocator.ConnectServer(".", "root\sms")  
Set providerLoc = swbemconnection.InstancesOf("SMS_ProviderLocation")  

For Each Location In providerLoc  
    If location.ProviderForLocalSite = True Then  
        Set swbemconnection = swbemLocator.ConnectServer(Location.Machine, "root\sms\site_" + Location.SiteCode)  
        Exit For  
    End If  
Next  

Call CreateDynamicCollection(swbemconnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")  

Sub CreateDynamicCollection(connection, newCollectionName, newCollectionComment, ownedByThisSite, queryForRule, ruleName, limitToCollectionID)  

    ' Create the collection.  
    Set newCollection = connection.Get("SMS_Collection").SpawnInstance_  
    newCollection.Name = newCollectionName  
    newCollection.Comment = newCollectionComment  
    newCollection.OwnedByThisSite = ownedByThisSite  
    newCollection.LimitToCollectionID = limitToCollectionID  

    ' Save the new collection and save the collection path for later.  
    Set collectionPath = newCollection.Put_      

    ' Create a new collection rule object for validation.  
    Set queryRule = connection.Get("SMS_CollectionRuleQuery")  

    ' Validate the query (good practice before adding it to the collection).   
    validQuery = queryRule.ValidateQuery(queryForRule)  

    ' Continue with processing, if the query is valid.  
    If validQuery Then  

        ' Create the query rule.  
        Set newQueryRule = QueryRule.SpawnInstance_  
        newQueryRule.QueryExpression = queryForRule  
        newQueryRule.RuleName = ruleName  

        ' Add the new query rule to a variable.  
        Set newCollectionRule = newQueryRule  

        ' Get the collection.  
        Set newCollection = connection.Get(collectionPath.RelPath)  

        ' Add the rules to the collection.  
        newCollection.AddMembershipRule newCollectionRule  

        ' Call RequestRefresh to initiate the collection evaluator.  
        newCollection.RequestRefresh False  

    End If  

End Sub  
public void CreateDynamicCollection(WqlConnectionManager connection, string newCollectionName, string newCollectionComment, bool ownedByThisSite, string query, string ruleName, string LimitToCollectionID){    try    {        // Create new SMS_Collection object.        IResultObject newCollection = connection.CreateInstance("SMS_Collection");        // Populate the new collection object properties.        newCollection["Name"].StringValue = newCollectionName;        newCollection["Comment"].StringValue = newCollectionComment;        newCollection["OwnedByThisSite"].BooleanValue = ownedByThisSite;        newCollection["LimitToCollectionID"].StringValue = LimitToCollectionID;        // Save the new collection object and properties.        // In this case, it seems necessary to 'get' the object again to access the properties.        newCollection.Put();        newCollection.Get();        // Validate the query.        Dictionary<string, object> validateQueryParameters = new Dictionary<string, object>();        validateQueryParameters.Add("WQLQuery", query);        IResultObject result = connection.ExecuteMethod("SMS_CollectionRuleQuery", "ValidateQuery", validateQueryParameters);        // Create query rule.        IResultObject newQueryRule = connection.CreateInstance("SMS_CollectionRuleQuery");        newQueryRule["QueryExpression"].StringValue = query;        newQueryRule["RuleName"].StringValue = ruleName;        // Add the rule. Although not used in this sample, QueryID contains the query identifier.                           Dictionary<string, object> addMembershipRuleParameters = new Dictionary<string, object>();        addMembershipRuleParameters.Add("collectionRule", newQueryRule);        IResultObject queryID = newCollection.ExecuteMethod("AddMembershipRule", addMembershipRuleParameters);        // Start collection evaluator.        newCollection.ExecuteMethod("RequestRefresh", null);        Console.WriteLine("Created collection: " + newCollectionName);    }    catch (SmsException ex)    {        Console.WriteLine("Failed to create collection. Error: " + ex.Message);        throw;    }}   

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
connection - Géré : WqlConnectionManager
- VBScript : SWbemServices
Une connexion valide au fournisseur SMS.
newCollectionName - Géré : String
- VBScript : String
Nom unique qui représente la collection dans la console Configuration Manager.
newCollectionComment - Géré : String
- VBScript : String
Commentaire général ou Notez que documente la collection.
ownedByThisSite - Géré : Boolean
- VBScript : Boolean
true Si la collection provient du site Configuration Manager local.
query - Géré : String
- VBScript : String
Instruction WQL SELECT contenant des résultats utilisés pour remplir la collection. L’instruction doit spécifier un nom de classe de ressource.
ruleName - Géré : String
- VBScript : String
Nom descriptif qui identifie la règle.
limitToCollectionID - Géré : String
- VBScript : String
Identificateur de collection pour limiter l’étendue de l’appartenance.

Compilation du code

L’exemple C# nécessite les éléments suivants :

Espaces de noms

Système

System.Collections.Generic

System.ComponentModel

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Programmation fiable

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs de Configuration Manager.

Sécurité du .NET Framework

Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager l’administration basée sur des rôles.

Voir aussi

Classe WMI du serveur SMS_Collection
Classe WMI du serveur SMS_CollectionRuleQuery
Présentation de la distribution de logiciels à propos des déploiements objets vue d’ensemble Comment se connecter à un fournisseur SMS dans Configuration Manager à l’aide de code managé
Guide pratique pour se connecter à un fournisseur SMS dans Configuration Manager avec WMI