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. Właściwość MemberClassName
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ł zapytań lub obu tych elementów. Reguły bezpośrednie definiują jawny zasób, natomiast reguły zapytań definiują kolekcję dynamiczną, która jest regularnie oceniana na podstawie bieżącego stanu witryny.
Uwaga
Podczas tworzenia reguły członkostwa bezpośredniego należy pamiętać, że reguła musi zawsze mieć taką samą nazwę jak komputer określony przez regułę.
Aplikacja używa klasy WMI serwera SMS_CollectionRuleQuery do definiowania reguł zapytań. Zapytanie musi być prawidłowe i może określić 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 wszystkich komputerach spełniających kryteria. Po zmianie witryny i ponownym obliczeniu kolekcji elementy członkowskie kolekcji są automatycznie dodawane i usuwane.
Uwaga
Podczas uruchamiania zapytania względem kolekcji dynamicznej upewnij się, że dostawca programu SMS został załadowany lub że została już uruchomiona inna metoda lub zapytanie.
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 instrumentacji zarządzania windows (WMI).
Nowa nazwa kolekcji dynamicznej.
Nowy dynamiczny komentarz kolekcji.
Flaga "należąca do tej witryny".
Zapytanie (ciąg).
Nazwa reguły statycznej.
Identyfikator kolekcji w celu ograniczenia zakresu 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 podprocedury w języku 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ą
Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz Podstawy dostawcy programu SMS.
Utwórz nowy obiekt kolekcji przy użyciu klasy WMI serwera SMS_Collection.
Utwórz regułę przy użyciu klasy WMI serwera SMS_CollectionRuleQuery .
Dodaj regułę do kolekcji.
Odśwież kolekcję.
Przykład
Poniższa przykładowa metoda tworzy kolekcję dynamiczną przy użyciu klasy WMI serwera SMS_Collection oraz klas i właściwości klasy WMI serwera SMS_CollectionRuleQuery Server .
Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu Configuration Manager.
' 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 | Wpisać | Opis |
---|---|---|
connection |
-Zarządzane: WqlConnectionManager - VBScript: SWbemServices |
Prawidłowe połączenie z dostawcą programu SMS. |
newCollectionName |
-Zarządzane: String -Vbscript: String |
Unikatowa nazwa reprezentująca kolekcję w konsoli Configuration Manager. |
newCollectionComment |
-Zarządzane: String -Vbscript: String |
Ogólny komentarz lub zwróć uwagę, że dokumentuje kolekcję. |
ownedByThisSite |
-Zarządzane: Boolean -Vbscript: Boolean |
true jeśli kolekcja pochodzi z lokalnej witryny Configuration Manager. |
query |
-Zarządzane: String -Vbscript: String |
Instrukcja SELECT języka WQL zawierająca wyniki, które są używane do wypełniania kolekcji. Instrukcja musi określać nazwę klasy zasobów. |
ruleName |
-Zarządzane: String -Vbscript: String |
Opisowa nazwa identyfikująca regułę. |
limitToCollectionID |
-Zarządzane: String -Vbscript: String |
Identyfikator kolekcji w celu ograniczenia zakresu członkostwa. |
Kompilowanie kodu
Przykład języka C# wymaga:
Obszary nazw
System
System.collections.generic
System.componentmodel
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Zestawu
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ż
SMS_Collection Server WMI Class
SMS_CollectionRuleQuery Server WMI Class
Omówienie dystrybucji oprogramowania — omówienieobiektów wdrożeń— jak nawiązać połączenie z dostawcą programu SMS w Configuration Manager przy użyciu kodu zarządzanego
Jak nawiązać połączenie z dostawcą programu SMS w Configuration Manager przy użyciu usługi WMI
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla