How to Create a Dynamic Collection (Jak utworzyć kolekcję dynamiczną)

W Configuration Manager aplikacja używa klasy WMI serwera SMS_Collection do definiowania atrybutów kolekcji, takich jak reguły członkostwa i harmonogram odświeżania. MemberClassNameWłaściwość zawiera nazwę klasy wygenerowaną przez system, która zawiera elementy członkowskie kolekcji.

Elementy członkowskie kolekcji są określane przy użyciu reguł bezpośrednich, reguł zapytania lub obu tych elementów. Reguły bezpośrednie definiują jawny zasób, podczas gdy reguły zapytania definiują dynamiczne kolekcje, które są regularnie oceniane na podstawie bieżącego stanu lokacji.

Uwaga

Podczas tworzenia reguły członkostwa bezpośredniego należy pamiętać, że reguła musi być zawsze taka sama jak nazwa komputera, który jest określany przez regułę.

Aplikacja używa klasy klasy WMI SMS_CollectionRuleQuery serwera do definiowania reguł zapytania. Zapytanie musi być prawidłowe i może określać kolekcję zawierającą zasoby, takie jak "Wszyscy użytkownicy w domenie firmowej". Następnie aplikacja może użyć zapytania, aby upewnić się, że program jest przeznaczony do dystrybucji oprogramowania na wszystkie komputery, które spełniają kryteria. Wraz ze zmianą lokacji i ponownym oceną kolekcji elementy członkowskie kolekcji są automatycznie dodawane i usuwane.

Uwaga

Podczas wykonywania zapytania względem kolekcji dynamicznej upewnij się, że dostawca programu SMS jest załadowany lub że inna metoda lub zapytanie zostało już uruchomione.

Kolekcje są ściśle powiązane z pakietami, programami i anonsami. Aby uzyskać więcej informacji, zobacz Omówienie dystrybucji oprogramowania.

Te przykłady wymagają następujących wartości:

  • Obiekt połączenia Instrumentacja zarządzania Windows (WMI).

  • Nowa nazwa kolekcji dynamicznej.

  • Nowy komentarz do kolekcji dynamicznej.

  • Flaga "należący do tej witryny".

  • Zapytanie (ciąg).

  • Nazwa reguły statycznej.

  • Identyfikator kolekcji, aby ograniczyć zakres członkostwa.

Uwaga

Jeśli kolekcja wszystkie systemy (SMS00001) została usunięta z serwera lokacji, przykład VBScript nie działa.

Przykład wywołania procedury podrzędnej w Visual Basic:

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

Przykład wywołania metody w języku C#:

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

Aby utworzyć kolekcję dynamiczną

  1. Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz temat podstawowe informacje o dostawcy programu SMS.

  2. Utwórz nowy obiekt kolekcji przy użyciu klasy klasy WMI serwera SMS_Collection .

  3. Utwórz regułę przy użyciu klasy klasy WMI serwera SMS_CollectionRuleQuery .

  4. Dodaj regułę do kolekcji.

  5. Odśwież kolekcję.

Przykład

Poniższa przykładowa Metoda tworzy kolekcje dynamiczne przy użyciu klasy WMI serwera SMS_Collection oraz klas klas WMI serwera SMS_CollectionRuleQuery i właściwości klasy.

Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz wywoływanie Configuration Manager fragmentów kodu.


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

Przykładowa Metoda ma następujące parametry:

Parametr Typ Opis
connection Zarządzanych WqlConnectionManager
-VBScript: SWbemServices
Prawidłowe połączenie z dostawcą programu SMS.
newCollectionName Zarządzanych String
VBScript String
Unikatowa nazwa, która reprezentuje kolekcję w konsoli Configuration Manager.
newCollectionComment Zarządzanych String
VBScript String
Ogólny komentarz lub notatka, która dokumentuje kolekcję.
ownedByThisSite Zarządzanych Boolean
VBScript Boolean
true Jeśli kolekcja pochodzi z lokalnej lokacji Configuration Manager.
query Zarządzanych String
VBScript String
Instrukcja SELECT języka WQL ma wyniki, które są używane do wypełniania kolekcji. Instrukcja musi określać nazwę klasy zasobów.
ruleName Zarządzanych String
VBScript String
Nazwa opisowa, która identyfikuje regułę.
limitToCollectionID Zarządzanych String
VBScript String
Identyfikator kolekcji, aby ograniczyć zakres członkostwa.

Kompilowanie kodu

Przykład w języku C# wymaga:

Przestrzenie nazw

System

System.Collections.Generic

System. ComponentModel

Microsoft.ConfigurationManagement. ManagementProvider

Microsoft.ConfigurationManagement. ManagementProvider. WqlQueryEngine

Zestaw

adminui. wqlqueryengine

microsoft.configurationmanagement. managementprovider

Niezawodne programowanie

Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.

Zabezpieczenia.NET Framework

Aby uzyskać więcej informacji na temat zabezpieczania aplikacji Configuration Manager, zobacz Configuration Manager Administracja oparta na rolach.

Zobacz też

Klasa WMI serwera SMS_Collection
Klasa WMI serwera SMS_CollectionRuleQuery
Omówienie dystrybucji oprogramowania dotyczącej obiektów wdrożeń Przegląd jak nawiązać połączenie z dostawcą programu SMS w Configuration Manager przy użyciu kodu zarządzanego
How to Connect to an SMS Provider in Configuration Manager by Using WMI (Jak połączyć się z dostawcą programu SMS w programie Configuration Manager przy użyciu usługi WMI)