Megosztás a következőn keresztül:


Dinamikus gyűjtemény létrehozása

A Configuration Manager az alkalmazás a SMS_Collection kiszolgálói WMI-osztályt használja egy gyűjtemény attribútumainak meghatározásához, például a tagsági szabályokhoz és a frissítési ütemezéshez. A MemberClassName tulajdonság tartalmazza a rendszer által létrehozott osztálynevet, amely a gyűjtemény tagjait tartalmazza.

A gyűjtemények tagjai közvetlen szabályokkal, lekérdezési szabályokkal vagy mindkettővel vannak megadva. A közvetlen szabályok explicit erőforrást határoznak meg, míg a lekérdezési szabályok dinamikus gyűjteményt határoznak meg, amelyet a rendszer rendszeresen kiértékel a hely aktuális állapota alapján.

Megjegyzés:

Közvetlen tagsági szabály létrehozásakor ne feledje, hogy a szabálynak mindig ugyanazzal a névvel kell rendelkeznie, mint a szabály által megadott számítógépnek.

Az alkalmazás a SMS_CollectionRuleQuery kiszolgálói WMI-osztály osztályt használja a lekérdezési szabályok meghatározásához. A lekérdezésnek érvényesnek kell lennie, és megadhatja azt a gyűjteményt, amely a következőhöz hasonló erőforrásokat tartalmaz: "A vállalati tartomány minden felhasználója". Az alkalmazás ezután a lekérdezés használatával biztosíthatja, hogy a program a feltételeknek megfelelő számítógépekre történő szoftverterjesztést célozza meg. A webhely változásával és a gyűjtemény újraértékelésével a rendszer automatikusan hozzáadja és törli a gyűjtemény tagjait.

Megjegyzés:

Ha dinamikus gyűjteményen futtat lekérdezést, győződjön meg arról, hogy az SMS-szolgáltató be van töltve, vagy hogy már futott egy másik metódus vagy lekérdezés.

A gyűjtemények szorosan kötődnek a csomagokhoz, programokhoz és hirdetésekhez. További információ: A szoftverterjesztés áttekintése.

Ezekhez a példákhoz a következő értékek szükségesek:

  • Egy Windows Management Instrumentation (WMI) kapcsolatobjektum.

  • Új dinamikus gyűjteménynév.

  • Új dinamikus gyűjtemény-megjegyzés.

  • A "webhely tulajdonosa" jelző.

  • Egy lekérdezés (sztring).

  • Egy statikus szabály neve.

  • Gyűjteményazonosító a tagság hatókörének korlátozásához.

Megjegyzés:

Ha a Minden rendszer (SMS00001) gyűjtemény el lett távolítva a helykiszolgálóról, a VBScript-példa nem működik.

Példa a Visual Basicben a subroutine hívásra:

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

Példa a metódushívásra a C#-ban:

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

Dinamikus gyűjtemény létrehozása

  1. Állítson be egy kapcsolatot az SMS-szolgáltatóval. További információ: Az SMS-szolgáltató alapjai.

  2. Hozza létre az új gyűjteményobjektumot a SMS_Collection kiszolgálói WMI-osztály osztály használatával.

  3. Hozza létre a szabályt a SMS_CollectionRuleQuery kiszolgálói WMI-osztály osztály használatával.

  4. Adja hozzá a szabályt a gyűjteményhez.

  5. Frissítse a gyűjteményt.

Példa

Az alábbi példametódus dinamikus gyűjteményt hoz létre a SMS_Collection kiszolgálói WMI-osztály és a SMS_CollectionRuleQuery kiszolgálói WMI-osztályosztályok és -osztálytulajdonságok használatával.

A mintakód meghívásával kapcsolatos információkért lásd: Configuration Manager Kódrészletek hívása.


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

A példametódus a következő paraméterekkel rendelkezik:

Paraméter Típus Leírás
connection -Kezelt: WqlConnectionManager
- VBScript: SWbemServices
Érvényes kapcsolat az SMS-szolgáltatóval.
newCollectionName -Kezelt: String
-Vbscript: String
A gyűjteményt a Configuration Manager konzolon jelölő egyedi név.
newCollectionComment -Kezelt: String
-Vbscript: String
A gyűjteményt dokumentáló általános megjegyzés vagy megjegyzés.
ownedByThisSite -Kezelt: Boolean
-Vbscript: Boolean
trueha a gyűjtemény a helyi Configuration Manager helyről származik.
query -Kezelt: String
-Vbscript: String
A WQL SELECT utasítás a gyűjtemény feltöltéséhez használt eredményekkel rendelkezik. A utasításnak meg kell adnia egy erőforrásosztály nevét.
ruleName -Kezelt: String
-Vbscript: String
Leíró név, amely azonosítja a szabályt.
limitToCollectionID -Kezelt: String
-Vbscript: String
Gyűjteményazonosító a tagság hatókörének korlátozásához.

A kód fordítása

A C#-példához a következőre van szükség:

Névterek

Rendszer

System.Collections.Generic

System.ComponentModel

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Összeszerelés

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Robusztus programozás

A hibakezeléssel kapcsolatos további információkért lásd: A Configuration Manager hibák ismertetése.

.NET-keretrendszer Security

A Configuration Manager alkalmazások biztonságossá tételével kapcsolatos további információkért lásd: Configuration Manager szerepköralapú felügyelet.

Lásd még

SMS_Collection kiszolgálói WMI-osztály
SMS_CollectionRuleQuery kiszolgálói WMI-osztály
Szoftverterjesztés áttekintéseA központi telepítésekről Objektumokáttekintése– Csatlakozás SMS-szolgáltatóhoz a Configuration Manager-ben felügyelt kód használatával
Csatlakozás SMS-szolgáltatóhoz Configuration Manager WMI használatával