Sdílet prostřednictvím


Jak vytvořit statickou 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 a 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_CollectionRuleDirect Server k definování přímých pravidel. Tento přístup se používá pro prostředky, které jsou statické povahy. Pokud máte například omezený počet licencí pro konkrétní softwarovou aplikaci, měla by aplikace používat přímá pravidla k inzerování konkrétním počítačům nebo uživatelům.

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

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

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

  • Nový název statické kolekce.

  • Nový komentář ke statické kolekci.

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

  • Název třídy prostředků.

  • ID prostředku.

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

Poznámka

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

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

Call CreateStaticCollection(swbemconnection, "New Static Collection Name", "New static collection comment.", true, "SMS_R_System", 2, "SMS00001")  

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

CreateStaticCollection (WMIConnection, "New Static Collection Name", "New static collection comment.", true, "SMS_R_System", 2, "SMS00001")  

Vytvoření statické 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 přímé pravidlo pomocí třídy služby WMI SMS_CollectionRuleDirect Server .

  4. Přidejte pravidlo do kolekce.

  5. Aktualizujte kolekci.

Příklad

Následující ukázková metoda vytvoří kolekci.

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


' Set up 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 CreateStaticCollection(swbemconnection, "New Static Collection Name", "New static collection comment.", true, "SMS_R_System", 2, "SMS00001")  

Sub CreateStaticCollection(connection, newCollectionName, newCollectionComment, ownedByThisSite, resourceClassName, resourceID, limitToCollectionID)  

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

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

    ' Create the direct rule.  
    Set newDirectRule = connection.Get("SMS_CollectionRuleDirect").SpawnInstance_  
    newDirectRule.ResourceClassName = resourceClassName  
    newDirectRule.ResourceID = resourceID  

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

    ' 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 Sub  
public void CreateStaticCollection(WqlConnectionManager connection, string newCollectionName, string newCollectionComment, bool ownedByThisSite, string resourceClassName, int resourceID, string limitToCollectionID)  
{  
    try  
    {  
        // Create a new SMS_Collection object.  
        IResultObject newCollection = connection.CreateInstance("SMS_Collection");  

        // Populate new collection 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();  

        // Create a new static rule object.  
        IResultObject newStaticRule = connection.CreateInstance("SMS_CollectionRuleDirect");  
        newStaticRule["ResourceClassName"].StringValue = resourceClassName;  
        newStaticRule["ResourceID"].IntegerValue = resourceID;  

        // Add the rule. Although not used in this sample, staticID contains the query identifier.                     
        Dictionary<string, object> addMembershipRuleParameters = new Dictionary<string, object>();  
        addMembershipRuleParameters.Add("collectionRule", newStaticRule);  
        IResultObject staticID = newCollection.ExecuteMethod("AddMembershipRule", addMembershipRuleParameters);  

        // Start collection evaluator.  
        Dictionary<string, object> requestRefreshParameters = new Dictionary<string, object>();  
        requestRefreshParameters.Add("IncludeSubCollections", false);  
        newCollection.ExecuteMethod("RequestRefresh", requestRefreshParameters);  

        // Output message.  
        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.
resourceClassName -Spravované: String
-Vbscript: String
Název prostředku objektu statického pravidla.
resourceID -Spravované: Integer
-Vbscript: Integer
ID prostředku.
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_CollectionRuleDirect
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