Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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, zatímco 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_CollectionRuleQuery Server k definování pravidel dotazů. Dotaz musí být platný a může určit kolekci tak, aby obsahovala prostředky, například Všichni uživatelé v podnikové doméně. Aplikace pak může pomocí dotazu zajistit, aby byl program určen pro distribuci softwaru do všech počítačů, které splňují kritéria. Když se web změní a kolekce se znovu vyhodnotí, členové kolekce se automaticky přidají a odstraní.
Poznámka
Při spouštění dotazu na dynamickou kolekci se ujistěte, že je poskytovatel serveru SMS načtený nebo že už je spuštěná jiná metoda nebo dotaz.
Kolekce jsou úzce svázány s balíčky, programy a reklamami. Další informace najdete v tématu Přehled distribuce softwaru.
Tyto příklady vyžadují následující hodnoty:
Objekt připojení rozhraní WMI (Windows Management Instrumentation).
Nový název dynamické kolekce.
Nový komentář k dynamické kolekci
Příznak "vlastníkem tohoto webu".
Dotaz (řetězec)
Název statického pravidla.
Identifikátor kolekce pro omezení rozsahu členství.
Poznámka
Pokud byla kolekce Všechny systémy (SMS00001) odebrána ze serveru lokality, příklad jazyka VBScript nefunguje.
Příklad volání podprogramu v jazyce Visual Basic:
Call CreateDynamicCollection(swbemconnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
Příklad volání metody v jazyce C#:
CreateDynamicCollection(WMIConnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
Vytvoření dynamické kolekce
Nastavte připojení k poskytovateli serveru SMS. Další informace najdete v tématu Základy poskytovatele serveru SMS.
Vytvořte nový objekt kolekce pomocí třídy služby WMI SMS_Collection Server .
Vytvořte pravidlo pomocí třídy služby WMI SMS_CollectionRuleQuery Server .
Přidejte pravidlo do kolekce.
Aktualizujte kolekci.
Příklad
Následující ukázková metoda vytvoří dynamickou kolekci pomocí třídy služby WMI SMS_Collection Server a tříd a tříd služby WMI SMS_CollectionRuleQuery Server .
Informace o volání ukázkového kódu najdete v tématu Volání Configuration Manager fragmentů kódu.
' 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; }}
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 |
true pokud kolekce pochází z místního webu Configuration Manager. |
query |
-Spravované: String -Vbscript: String |
Příkaz WQL SELECT s výsledky, které slouží k naplnění kolekce. Příkaz musí obsahovat název třídy prostředků. |
ruleName |
-Spravované: String -Vbscript: String |
Popisný název, který identifikuje pravidlo. |
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_CollectionRuleQuery
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