Erstellen einer dynamischen SammlungHow to Create a Dynamic Collection

In Configuration Manager verwendet Ihre Anwendung die SMS_Collection Server-WMI-Klasse , um die Attribute einer Auflistung zu definieren, z. b. die Mitgliedschafts Regeln und den Aktualisierungs Zeitplan.In Configuration Manager, your application uses the SMS_Collection Server WMI Class to define the attributes of a collection, such as the membership rules and the refresh schedule. Die- MemberClassName Eigenschaft enthält den vom System generierten Klassennamen, der die Member der Auflistung enthält.The MemberClassName property contains the system-generated class name that contains the members of the collection.

Mitglieder einer Auflistung werden mithilfe von direkten Regeln, Abfrage Regeln oder beidem angegeben.Members of a collection are specified by using direct rules, query rules, or both. Direkte Regeln definieren eine explizite Ressource, während Abfrage Regeln eine dynamische Sammlung definieren, die regelmäßig basierend auf dem aktuellen Status des Standorts ausgewertet wird.Direct rules define an explicit resource, whereas query rules define a dynamic collection that is regularly evaluated based on the current state of the site.

Hinweis

Beachten Sie beim Erstellen einer direkten Mitgliedschafts Regel, dass die Regel immer den gleichen Namen wie der von der Regel festgelegten Computer aufweisen muss.When creating a direct membership rule, remember that the rule must always have the same name as the computer that the rule specifies.

Die Anwendung verwendet die SMS_CollectionRuleQuery Server-WMI-Klassen Klasse zum Definieren von Abfrage Regeln.Your application uses the SMS_CollectionRuleQuery Server WMI Class class to define query rules. Die Abfrage muss gültig sein und die Sammlung angeben, die Ressourcen wie "alle Benutzer in der Unternehmens Domäne" enthalten soll.The query must be valid and can specify the collection to contain resources such as "All users in the corporate domain." Die Anwendung kann dann die Abfrage verwenden, um sicherzustellen, dass ein Programm für die Software Verteilung an alle Computer vorgesehen ist, die die Kriterien erfüllen.The application can then use the query to ensure that a program is targeted for software distribution to all computers that meet the criteria. Wenn sich die Website ändert und die Sammlung neu ausgewertet wird, werden Mitglieder der Sammlung automatisch hinzugefügt und gelöscht.As the site changes and the collection is re-evaluated, members of the collection are automatically added and deleted.

Hinweis

Wenn Sie eine Abfrage für eine dynamische Auflistung ausführen, stellen Sie sicher, dass der SMS-Anbieter geladen ist oder bereits eine andere Methode oder Abfrage ausgeführt wurde.When running a query against a dynamic collection, ensure that the SMS Provider is loaded or that another method or query has already run.

Sammlungen sind eng an Pakete, Programme und Ankündigungen gebunden.Collections are closely tied to packages, programs and advertisements. Weitere Informationen finden Sie unter Übersicht über die Softwareverteilung.For more information, see Software Distribution Overview.

Für diese Beispiele sind die folgenden Werte erforderlich:These examples require the following values:

  • Ein Windows-Verwaltungsinstrumentation-Verbindungsobjekt (WMI)A Windows Management Instrumentation (WMI) connection object.

  • Ein neuer dynamischer Sammlungs Name.A new dynamic collection name.

  • Ein neuer dynamischer Sammlungs Kommentar.A new dynamic collection comment.

  • Das Flag "Besitzer dieser Site".The 'owned by this site' flag.

  • Eine Abfrage (Zeichenfolge).A query (string).

  • Ein statischer Regelname.A static rule name.

  • Ein Auflistungs Bezeichner, um den Bereich der Mitgliedschaft einzuschränken.A collection identifier to limit the scope of membership.

Hinweis

Wenn die Sammlung alle Systeme (SMS00001) vom Standort Server entfernt wurde, funktioniert das VBScript-Beispiel nicht.If the All Systems (SMS00001) collection has been removed from the site server, the VBScript example does not work.

Beispiel für den Unterroutine aufrufen in Visual Basic:Example of the subroutine call in Visual Basic:

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

Beispiel für den Methoden aufrufin c#:Example of the method call in C#:

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

So erstellen Sie eine dynamische SammlungTo create a dynamic collection

  1. Richten Sie eine Verbindung mit dem SMS-Anbieter ein.Set up a connection to the SMS Provider. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.For more information, see SMS Provider fundamentals.

  2. Erstellen Sie das neue Sammlungsobjekt mithilfe der WMI-klassenklasse SMS_Collection Server .Create the new collection object by using the SMS_Collection Server WMI Class class.

  3. Erstellen Sie die Regel, indem Sie die WMI-Klasse SMS_CollectionRuleQuery Server verwenden.Create the rule by using the SMS_CollectionRuleQuery Server WMI Class class.

  4. Fügen Sie die Regel der Auflistung hinzu.Add the rule to the collection.

  5. Aktualisieren Sie die Auflistung.Refresh the collection.

BeispielExample

Die folgende Beispiel Methode erstellt eine dynamische Auflistung mithilfe der WMI-Klasse für den SMS_Collection-Server und der WMI-Klassen Klassen für den SMS_CollectionRuleQuery Server und der Klasseneigenschaften.The following example method creates a dynamic collection by using the SMS_Collection Server WMI Class and the SMS_CollectionRuleQuery Server WMI Class classes and class properties.

Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager-Codeausschnitten.For information about calling the sample code, see Calling Configuration Manager Code Snippets.


' 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;    }}   

Die Beispielmethode verfügt über die folgenden Parameter:The example method has the following parameters:

ParameterParameter typeType BESCHREIBUNGDescription
connection - Verwaltet: WqlConnectionManager- Managed: WqlConnectionManager
- VBScript: SWbemServices- VBScript: SWbemServices
Eine gültige Verbindung mit dem SMS-Anbieter.A valid connection to the SMS Provider.
newCollectionName - Verwaltet: String- Managed: String
- VBScript: String- VBScript: String
Der eindeutige Name, der die Auflistung in der Configuration Manager Konsole darstellt.The unique name that represents the collection in the Configuration Manager console.
newCollectionComment - Verwaltet: String- Managed: String
- VBScript: String- VBScript: String
Allgemeiner Kommentar oder Hinweis, dass die Auflistung dokumentiert.General comment or note that documents the collection.
ownedByThisSite - Verwaltet: Boolean- Managed: Boolean
- VBScript: Boolean- VBScript: Boolean
true , wenn die Sammlung von der lokalen Configuration Manager Site stammt.true if the collection originated at the local Configuration Manager site.
query - Verwaltet: String- Managed: String
- VBScript: String- VBScript: String
Die SELECT-Anweisung von WQL hat Ergebnisse, die zum Auffüllen der Auflistung verwendet werden.WQL SELECT statement having results that are used to populate the collection. Die-Anweisung muss einen Ressourcen Klassennamen angeben.The statement must specify a resource class name.
ruleName - Verwaltet: String- Managed: String
- VBScript: String- VBScript: String
Beschreibender Name, der die Regel identifiziert.Descriptive name that identifies the rule.
limitToCollectionID - Verwaltet: String- Managed: String
- VBScript: String- VBScript: String
Sammlungs Bezeichner, um den Bereich der Mitgliedschaft einzuschränken.Collection identifier to limit the scope of membership.

Kompilieren des CodesCompiling the Code

Für das C#-Beispiel ist Folgendes erforderlich:The C# example requires:

NamespacesNamespaces

SystemSystem

System.Collections.GenericSystem.Collections.Generic

System.ComponentModelSystem.ComponentModel

Microsoft.ConfigurationManagement.ManagementProviderMicrosoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngineMicrosoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

AssemblyAssembly

adminui.wqlqueryengineadminui.wqlqueryengine

microsoft.configurationmanagement.managementprovidermicrosoft.configurationmanagement.managementprovider

Stabile ProgrammierungRobust Programming

Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager-Fehlern.For more information about error handling, see About Configuration Manager Errors.

.NET Framework-Sicherheit.NET Framework Security

Weitere Informationen zum Sichern von Configuration Manager Anwendungen finden Sie unter Configuration Manager rollenbasierte Verwaltung.For more information about securing Configuration Manager applications, see Configuration Manager role-based administration.

Weitere InformationenSee Also

WMI-Klasse für den SMS_Collection Server SMS_Collection Server WMI Class
WMI-Klasse für den SMS_CollectionRuleQuery Server SMS_CollectionRuleQuery Server WMI Class
Übersicht über die Software Verteilung Übersicht über bereit Stellungen Objekte Gewusst wie: Herstellen einer Verbindung mit einem SMS-Anbieter in Configuration Manager mithilfe von verwaltetem Code Software distribution overview About deployments Objects overview How to Connect to an SMS Provider in Configuration Manager by Using Managed Code
Herstellen einer Verbindung mit einem SMS-Anbieter in Configuration Manager mithilfe von WMIHow to Connect to an SMS Provider in Configuration Manager by Using WMI