Sdílet prostřednictvím


Jak vytvořit dynamickou kolekci

V Configuration Manager aplikace používá serverovou třídu služby WMI SMS_Collection k definování atributů kolekce, jako jsou pravidla členství a plán aktualizace. Vlastnost MemberClassName obsahuje název třídy vygenerované systémem, který obsahuje členy kolekce.

Členové kolekce jsou určeni pomocí přímých pravidel, pravidel dotazů nebo obojího. Přímá pravidla definují explicitní prostředek, zatímco pravidla dotazů definují dynamickou kolekci, která se pravidelně vyhodnocuje na základě aktuálního stavu webu.

Poznámka

Při vytváření pravidla přímého členství nezapomeňte, že pravidlo musí mít vždy stejný název jako počítač, který pravidlo určuje.

Vaše aplikace používá třídu služby WMI SMS_CollectionRuleQuery Server k definování pravidel dotazů. Dotaz musí být platný a může určit kolekci tak, aby obsahovala prostředky, například Všichni uživatelé v podnikové doméně. Aplikace pak může pomocí dotazu zajistit, aby byl program určen pro distribuci softwaru do všech počítačů, které splňují kritéria. Když se web změní a kolekce se znovu vyhodnotí, členové kolekce se automaticky přidají a odstraní.

Poznámka

Při spouštění dotazu na dynamickou kolekci se ujistěte, že je poskytovatel serveru SMS načtený nebo že už je spuštěná jiná metoda nebo dotaz.

Kolekce jsou úzce svázány s balíčky, programy a reklamami. Další informace najdete v tématu Přehled distribuce softwaru.

Tyto příklady vyžadují následující hodnoty:

  • Objekt připojení rozhraní WMI (Windows Management Instrumentation).

  • Nový název dynamické kolekce.

  • Nový komentář k dynamické kolekci

  • Příznak "vlastníkem tohoto webu".

  • Dotaz (řetězec)

  • Název statického pravidla.

  • Identifikátor kolekce pro omezení rozsahu členství.

Poznámka

Pokud byla kolekce Všechny systémy (SMS00001) odebrána ze serveru lokality, příklad jazyka VBScript nefunguje.

Příklad volání podprogramu v jazyce Visual Basic:

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

Příklad volání metody v jazyce C#:

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

Vytvoření dynamické kolekce

  1. Nastavte připojení k poskytovateli serveru SMS. Další informace najdete v tématu Základy poskytovatele serveru SMS.

  2. Vytvořte nový objekt kolekce pomocí třídy služby WMI SMS_Collection Server .

  3. Vytvořte pravidlo pomocí třídy služby WMI SMS_CollectionRuleQuery Server .

  4. Přidejte pravidlo do kolekce.

  5. Aktualizujte kolekci.

Příklad

Následující ukázková metoda vytvoří dynamickou kolekci pomocí třídy služby WMI SMS_Collection Server a tříd a tříd služby WMI SMS_CollectionRuleQuery Server .

Informace o volání ukázkového kódu najdete v tématu Volání Configuration Manager fragmentů kódu.


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

Ukázková metoda má následující parametry:

Parametr Typ Popis
connection -Spravované: WqlConnectionManager
- VBScript: SWbemServices
Platné připojení k poskytovateli serveru SMS.
newCollectionName -Spravované: String
-Vbscript: String
Jedinečný název, který představuje kolekci v konzole Configuration Manager.
newCollectionComment -Spravované: String
-Vbscript: String
Obecný komentář nebo poznámka, že dokumentuje kolekci.
ownedByThisSite -Spravované: Boolean
-Vbscript: Boolean
truepokud kolekce pochází z místního webu Configuration Manager.
query -Spravované: String
-Vbscript: String
Příkaz WQL SELECT s výsledky, které slouží k naplnění kolekce. Příkaz musí obsahovat název třídy prostředků.
ruleName -Spravované: String
-Vbscript: String
Popisný název, který identifikuje pravidlo.
limitToCollectionID -Spravované: String
-Vbscript: String
Identifikátor kolekce pro omezení rozsahu členství.

Kompilace kódu

Příklad jazyka C# vyžaduje:

Obory názvů

Systému

System.collections.generic

System.componentmodel

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Sestavení

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Robustní programování

Další informace o zpracování chyb najdete v tématu Informace o chybách Configuration Manager.

Zabezpečení rozhraní .NET Framework

Další informace o zabezpečení Configuration Manager aplikací najdete v tématu Configuration Manager správa na základě rolí.

Viz taky

Serverová třída služby WMI SMS_Collection
Serverová třída služby WMI SMS_CollectionRuleQuery
Přehled distribuce softwaruO nasazení ObjektyPřehledPřipojení k poskytovateli serveru SMS v Configuration Manager pomocí spravovaného kódu
Připojení k poskytovateli serveru SMS v Configuration Manager pomocí rozhraní WMI