Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Configuration Manager, la aplicación usa la clase WMI de servidor SMS_Collection para definir los atributos de una colección, como las reglas de pertenencia y la programación de actualización. La MemberClassName
propiedad contiene el nombre de clase generado por el sistema que contiene los miembros de la colección.
Los miembros de una colección se especifican mediante reglas directas, reglas de consulta o ambas. Las reglas directas definen un recurso explícito, mientras que las reglas de consulta definen una colección dinámica que se evalúa periódicamente en función del estado actual del sitio.
Nota:
Al crear una regla de pertenencia directa, recuerde que la regla siempre debe tener el mismo nombre que el equipo especificado por la regla.
La aplicación usa la clase WMI SMS_CollectionRuleQuery Server para definir reglas de consulta. La consulta debe ser válida y puede especificar la colección para que contenga recursos como "Todos los usuarios del dominio corporativo". A continuación, la aplicación puede usar la consulta para asegurarse de que un programa está destinado a la distribución de software a todos los equipos que cumplen los criterios. A medida que cambia el sitio y se vuelve a evaluar la colección, los miembros de la colección se agregan y eliminan automáticamente.
Nota:
Al ejecutar una consulta en una colección dinámica, asegúrese de que el proveedor de SMS está cargado o de que ya se ha ejecutado otro método o consulta.
Las colecciones están estrechamente vinculadas a paquetes, programas y anuncios. Para obtener más información, consulte Introducción a la distribución de software.
Estos ejemplos requieren los siguientes valores:
Objeto de conexión de Instrumental de administración de Windows (WMI).
Un nuevo nombre de colección dinámica.
Un nuevo comentario de colección dinámica.
Marca "propiedad de este sitio".
Una consulta (cadena).
Nombre de regla estática.
Identificador de colección para limitar el ámbito de pertenencia.
Nota:
Si la colección Todos los sistemas (SMS00001) se ha quitado del servidor de sitio, el ejemplo de VBScript no funciona.
Ejemplo de la llamada a la subrutina en Visual Basic:
Call CreateDynamicCollection(swbemconnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
Ejemplo de la llamada al método en C#:
CreateDynamicCollection(WMIConnection, "New Dynamic Collection Name", "New dynamic collection comment.", true, "SELECT * from SMS_R_System", "New Rule Name", "SMS00001")
Para crear una colección dinámica
Configure una conexión con el proveedor de SMS. Para obtener más información, consulte Aspectos básicos del proveedor de SMS.
Cree el nuevo objeto de colección mediante la clase WMI SMS_Collection Server .
Cree la regla mediante la clase WMI SMS_CollectionRuleQuery Server .
Agregue la regla a la colección.
Actualice la colección.
Ejemplo
El siguiente método de ejemplo crea una colección dinámica mediante la clase WMI de servidor SMS_Collection y las clases y propiedades de clase WMI de SMS_CollectionRuleQuery servidor .
Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de 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; }}
El método de ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
connection |
-Administrado: WqlConnectionManager - VBScript: SWbemServices |
Una conexión válida al proveedor de SMS. |
newCollectionName |
-Administrado: String -Vbscript: String |
Nombre único que representa la colección en la consola de Configuration Manager. |
newCollectionComment |
-Administrado: String -Vbscript: String |
Comentario general o tenga en cuenta que documenta la colección. |
ownedByThisSite |
-Administrado: Boolean -Vbscript: Boolean |
true si la colección se originó en el sitio de Configuration Manager local. |
query |
-Administrado: String -Vbscript: String |
La instrucción SELECT de WQL tiene resultados que se usan para rellenar la colección. La instrucción debe especificar un nombre de clase de recurso. |
ruleName |
-Administrado: String -Vbscript: String |
Nombre descriptivo que identifica la regla. |
limitToCollectionID |
-Administrado: String -Vbscript: String |
Identificador de colección para limitar el ámbito de pertenencia. |
Compilar el código
El ejemplo de C# requiere:
Espacios de nombres
System
System.Collections.Generic
System.ComponentModel
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Ensamblado
adminui.wqlqueryengine
microsoft.configurationmanagement.managementprovider
Programación sólida
Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.
Seguridad de .NET Framework
Para obtener más información sobre la protección de aplicaciones Configuration Manager, consulte Configuration Manager administración basada en roles.
Consulta también
SMS_Collection clase WMI de servidor
SMS_CollectionRuleQuery clase WMI de servidor
Información general sobre la distribución de softwareAcerca de las implementacionesIntroducción a los objetos Cómo conectarse a un proveedor de SMS en Configuration Manager mediante código administrado
Conexión a un proveedor de SMS en Configuration Manager mediante WMI