Dela via


Skapa en dynamisk samling

I Configuration Manager använder programmet WMI-klassen SMS_Collection Server för att definiera attributen för en samling, till exempel medlemskapsregler och uppdateringsschemat. Egenskapen MemberClassName innehåller det systemgenererade klassnamnet som innehåller medlemmarna i samlingen.

Medlemmar i en samling anges med hjälp av direkta regler, frågeregler eller både och. Direktregler definierar en explicit resurs, medan frågeregler definierar en dynamisk samling som regelbundet utvärderas baserat på platsens aktuella tillstånd.

Obs!

När du skapar en regel för direkt medlemskap ska du komma ihåg att regeln alltid måste ha samma namn som den dator som regeln anger.

Programmet använder klassen SMS_CollectionRuleQuery Serverns WMI-klass för att definiera frågeregler. Frågan måste vara giltig och kan ange att samlingen ska innehålla resurser, till exempel "Alla användare i företagsdomänen". Programmet kan sedan använda frågan för att säkerställa att ett program är avsett för programdistribution till alla datorer som uppfyller kriterierna. När webbplatsen ändras och samlingen utvärderas på nytt läggs medlemmar i samlingen till och tas bort automatiskt.

Obs!

När du kör en fråga mot en dynamisk samling kontrollerar du att SMS-providern har lästs in eller att en annan metod eller fråga redan har körts.

Samlingarna är nära knutna till paket, program och annonser. Mer information finns i Översikt över programvarudistribution.

De här exemplen kräver följande värden:

  • Ett WMI-anslutningsobjekt (Windows Management Instrumentation).

  • Ett nytt dynamiskt samlingsnamn.

  • En ny kommentar för dynamisk samling.

  • Flaggan "ägs av den här webbplatsen".

  • En fråga (sträng).

  • Ett statiskt regelnamn.

  • En samlingsidentifierare för att begränsa medlemskapets omfattning.

Obs!

Om samlingen Alla system (SMS00001) har tagits bort från platsservern fungerar inte VBScript-exemplet.

Exempel på subrutinanropet i Visual Basic:

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

Exempel på metodanropet i C#:

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

Så här skapar du en dynamisk samling

  1. Konfigurera en anslutning till SMS-providern. Mer information finns i grunderna för SMS-provider.

  2. Skapa det nya samlingsobjektet med hjälp av klassen SMS_Collection Server WMI .

  3. Skapa regeln med hjälp av klassen SMS_CollectionRuleQuery Serverns WMI-klass .

  4. Lägg till regeln i samlingen.

  5. Uppdatera samlingen.

Exempel

Följande exempelmetod skapar en dynamisk samling med hjälp av SMS_Collection-serverns WMI-klass och SMS_CollectionRuleQuery WMI-klassklasser och klassegenskaper.

Information om hur du anropar exempelkoden finns i Anropa Configuration Manager kodfragment.


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

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
connection -Hanterade: WqlConnectionManager
– VBScript: SWbemServices
En giltig anslutning till SMS-providern.
newCollectionName -Hanterade: String
-Vbscript: String
Det unika namn som representerar samlingen i Configuration Manager-konsolen.
newCollectionComment -Hanterade: String
-Vbscript: String
Allmän kommentar eller observera att dokument samlingen.
ownedByThisSite -Hanterade: Boolean
-Vbscript: Boolean
trueom samlingen har sitt ursprung på den lokala Configuration Manager platsen.
query -Hanterade: String
-Vbscript: String
WQL SELECT-instruktion med resultat som används för att fylla i samlingen. Instruktionen måste ange ett resursklassnamn.
ruleName -Hanterade: String
-Vbscript: String
Beskrivande namn som identifierar regeln.
limitToCollectionID -Hanterade: String
-Vbscript: String
Samlingsidentifierare för att begränsa medlemskapets omfattning.

Kompilera koden

C#-exemplet kräver:

Namnområden

System

System.Collections.Generic

System.ComponentModel

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Församlingen

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Robust programmering

Mer information om felhantering finns i Om Configuration Manager fel.

.NET Framework Säkerhet

Mer information om hur du skyddar Configuration Manager program finns i Configuration Manager rollbaserad administration.

Se även

SMS_Collection serverns WMI-klass
SMS_CollectionRuleQuery serverns WMI-klass
Översikt över programvarudistributionOm distributionsobjekt– översiktSå här ansluter du till en SMS-provider i Configuration Manager med hjälp av hanterad kod
Ansluta till en SMS-provider i Configuration Manager med hjälp av WMI