Erstellen einer dynamischen Sammlung
In Configuration Manager verwendet Ihre Anwendung die WMI-Klasse SMS_Collection Server, um die Attribute einer Sammlung zu definieren, z. B. die Mitgliedschaftsregeln und den Aktualisierungszeitplan. Die MemberClassName
-Eigenschaft enthält den vom System generierten Klassennamen, der die Member der Auflistung enthält.
Elemente einer Auflistung werden mithilfe direkter Regeln, Abfrageregeln oder beides angegeben. Direkte Regeln definieren eine explizite Ressource, während Abfrageregeln eine dynamische Sammlung definieren, die regelmäßig basierend auf dem aktuellen Zustand der Website ausgewertet wird.
Hinweis
Denken Sie beim Erstellen einer Direkten Mitgliedschaftsregel daran, dass die Regel immer denselben Namen wie der Computer haben muss, den die Regel angibt.
Ihre Anwendung verwendet die WMI-Klasse SMS_CollectionRuleQuery Server , um Abfrageregeln zu definieren. Die Abfrage muss gültig sein und kann angeben, dass die Sammlung Ressourcen wie "Alle Benutzer in der Unternehmensdomäne" enthält. Die Anwendung kann dann die Abfrage verwenden, um sicherzustellen, dass ein Programm für die Softwareverteilung an alle Computer vorgesehen ist, die die Kriterien erfüllen. Wenn sich die Website ändert und die Sammlung erneut ausgewertet wird, werden Elemente der Sammlung automatisch hinzugefügt und gelöscht.
Hinweis
Stellen Sie beim Ausführen einer Abfrage für eine dynamische Sammlung sicher, dass der SMS-Anbieter geladen ist oder dass bereits eine andere Methode oder Abfrage ausgeführt wurde.
Sammlungen sind eng an Pakete, Programme und Werbung gebunden. Weitere Informationen finden Sie unter Übersicht über die Softwareverteilung.
Für diese Beispiele sind die folgenden Werte erforderlich:
Ein WMI-Verbindungsobjekt (Windows Management Instrumentation).
Ein neuer dynamischer Sammlungsname.
Ein neuer dynamischer Sammlungskommentar.
Das Flag "im Besitz dieser Website".
Eine Abfrage (Zeichenfolge).
Ein statischer Regelname.
Ein Sammlungsbezeichner zum Einschränken des Mitgliedschaftsbereichs.
Hinweis
Wenn die Sammlung Alle Systeme (SMS00001) vom Standortserver entfernt wurde, funktioniert das VBScript-Beispiel nicht.
Beispiel für den Unterroutineaufruf in Visual Basic:
Call CreateDynamicCollection(swbemconnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
Beispiel für den Methodenaufruf in C#:
CreateDynamicCollection(WMIConnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
So erstellen Sie eine dynamische Sammlung
Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.
Erstellen Sie das neue Auflistungsobjekt mithilfe der WMI-Klasse SMS_Collection Server .
Erstellen Sie die Regel mithilfe der WMI-Klasse SMS_CollectionRuleQuery Server .
Fügen Sie der Auflistung die Regel hinzu.
Aktualisieren Sie die Sammlung.
Beispiel
Die folgende Beispielmethode erstellt eine dynamische Auflistung mithilfe der WMI-Klasse des SMS_Collection-Servers und der SMS_CollectionRuleQuery Server-WMI-Klassen und -Klasseneigenschaften.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager Codeausschnitten.
' 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; }}
Die Beispielmethode verfügt über die folgenden Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
connection |
-Verwalteten: WqlConnectionManager – VBScript: SWbemServices |
Eine gültige Verbindung mit dem SMS-Anbieter. |
newCollectionName |
-Verwalteten: String -Vbscript: String |
Der eindeutige Name, der die Auflistung in der Configuration Manager-Konsole darstellt. |
newCollectionComment |
-Verwalteten: String -Vbscript: String |
Allgemeiner Kommentar oder Hinweis, der die Sammlung dokumentiert. |
ownedByThisSite |
-Verwalteten: Boolean -Vbscript: Boolean |
true , wenn die Sammlung auf der lokalen Configuration Manager-Website stammt. |
query |
-Verwalteten: String -Vbscript: String |
WQL SELECT-Anweisung mit Ergebnissen, die zum Auffüllen der Auflistung verwendet werden. Die -Anweisung muss einen Ressourcenklassennamen angeben. |
ruleName |
-Verwalteten: String -Vbscript: String |
Beschreibender Name, der die Regel identifiziert. |
limitToCollectionID |
-Verwalteten: String -Vbscript: String |
Sammlungsbezeichner zum Einschränken des Mitgliedschaftsbereichs. |
Kompilieren des Codes
Für das C#-Beispiel ist Folgendes erforderlich:
Namespaces
System
System.Collections.Generic
System.ComponentModel
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
adminui.wqlqueryengine
microsoft.configurationmanagement.managementprovider
Robuste Programmierung
Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager Fehlern.
.NET Framework-Sicherheit
Weitere Informationen zum Schützen Configuration Manager Anwendungen finden Sie unter Configuration Manager rollenbasierte Verwaltung.
Siehe auch
WMI-Klasse des SMS_Collection-Servers
WMI-Klasse des SMS_CollectionRuleQuery-Servers
Übersicht über die SoftwareverteilungÜber BereitstellungenObjekte :Herstellen einer Verbindung mit einem SMS-Anbieter in Configuration Manager mithilfe von verwaltetem Code
Herstellen einer Verbindung mit einem SMS-Anbieter in Configuration Manager mithilfe von WMI
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für