Lectura y escritura en el archivo de control de sitio de Configuration Manager mediante WMI

En Configuration Manager, se escribe en el archivo de control de sitio mediante Instrumental de administración de Windows (WMI) mediante los métodos de SMS_SiteControlFile clase.

Al escribir en el archivo de control de sitio mediante WMI, se usa un identificador de sesión para identificar la aplicación. Esto se usa para administrar actualizaciones simultáneas en el archivo.

Cuando haya terminado de escribir en el archivo de control de sitio, debe confirmar los cambios.

SMS_SiteControlFile tiene los métodos siguientes para administrar los cambios en el archivo de control de sitio.

Método Descripción
CommitSCF Aplica los cambios a la base de datos de Configuration Manager.
RefreshSCF Actualiza la copia en memoria del archivo de control de sitio con los cambios recientes de la base de datos de Configuration Manager.
GetSessionHandle Obtiene la copia en memoria del archivo de control de sitio y un identificador de sesión. Coloque el identificador de sesión en un IWbemContext objeto que se pasa a todos los IWbemServices métodos.
ReleaseSessionHandle Libera la copia en memoria del archivo de control de sitio y los recursos asociados al identificador de sesión.

Precaución

Debe tener experiencia en la administración de la configuración de un sitio antes de usar las clases de proveedor de SMS para modificar la configuración del sitio. Puede causar un gran daño a un sitio cambiando algunos elementos configurables. Debe tener mucha precaución o evitar el uso total de las SMS_SCI_FileDefinition clases y SMS_SCI_SiteDefinition . Estas clases administran el propio archivo de control de sitio. Si no tiene cuidado, puede hacer que el sitio sea inútil.

Para escribir en el archivo de control de sitio

  1. Configure una conexión con el proveedor de SMS. Para obtener más información, consulte Aspectos básicos del proveedor de SMS.

  2. Cree un conjunto de SWbemNameValue valores para contener los datos de contexto.

  3. Obtenga un identificador de sesión de la SMS_SiteControlFile clase GetSessionHandle.

  4. Agregue el identificador de sesión a los datos de contexto.

  5. Llame al SMS_SiteControlFile objeto RefreshSCF para obtener la copia más reciente del archivo de control de sitio. Use los datos de contexto en la llamada.

  6. Consulte el recurso de archivo de control de sitio que desea actualizar mediante los datos de contexto.

  7. Actualice el recurso con los datos de contexto.

  8. Confirme los cambios en el archivo de control de sitio mediante el método object SMS_SiteControlFileCommitSCF .

  9. Llame al método de SMS_SiteControlFile objeto ReleaseSessionHandle para liberar el identificador de sesión.

Ejemplo

En el siguiente ejemplo de VBScript se obtiene acceso al componente del agente cliente del archivo de control de sitio y se crea una propiedad ficticia, una lista de propiedades y una lista de varias cadenas. A continuación, quita las actualizaciones que se realizaron. En el ejemplo se muestra cómo configurar el identificador de sesión, obtener el archivo de control de sitio, consultar el archivo de control de sitio, realizar actualizaciones y confirmar cambios en el archivo de control de sitio.

En el ejemplo, la LocaleID propiedad está codificada de forma rígida en inglés (EE. UU.). Si necesita la configuración regional para los estados que no son de EE. UU. instalaciones, puede obtenerla de la propiedad SMS_Identification ClaseLocaleID WMI de servidor.

Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de Configuration Manager.

Sub ReadWriteScf(connection, siteCode)  

    Dim context  
    Dim query  
    Dim resource  
    Dim resources  
    Dim inParams  

    Set context = CreateObject("WbemScripting.SWbemNamedValueSet")  

    ' Add the standard SMS context qualifiers to the context object.  
    context.Add "LocaleID", "MS\1033"  
    context.Add "MachineName", "MyMachine"  
    context.Add "ApplicationName", "MyApp"  

    ' Add the session handle.  
    context.Add "SessionHandle", _  
         connection.ExecMethod("SMS_SiteControlFile", "GetSessionHandle").SessionHandle  

   ' Load site control file.  
       Set inParams = connection.Get("SMS_SiteControlFile").Methods_("RefreshSCF").InParameters.SpawnInstance_  
InParams.SiteCode = siteCode  
connection.ExecMethod "SMS_SiteControlFile", "RefreshSCF", inParams, , context  

    ' Query for the client agent component.  
    query = "SELECT * FROM SMS_SCI_ClientComp " & _  
            "WHERE ClientComponentName = 'Client Agent' " & _  
           "AND SiteCode = '" & siteCode & "'"  

    Set resources = connection.ExecQuery(query, , , context)             

    For each resource in resources  

    ' Embedded property.  

        WScript.Echo "Embedded property"  
        Wscript.Echo "-----------------"  

        Dim value  
        Dim value1  
        Dim value2  

        Call WriteScfEmbeddedProperty(connection,context,resource,"Test2",20,"Hello","World")  

        If  GetScfEmbeddedProperty(resource,"Test2",value,value1,value2) = True Then  
            Wscript.Echo "Value: " + CStr(value)  
            WScript.Echo "Value1: " + value1  
            WScript.Echo "Value2: " + value2  
        End If  

        WScript.Echo   
        dim n,l  
        dim updatedProps   
        Dim scfProp  

        n = 0  
        ' Remove the property.  
        For l = 0 To UBound (resource.Props)   

            ' Copy each element except the one to delete.  
            If resource.Props(l).PropertyName <> "Test2" Then  
                Dim embeddedProperty  
                Set embeddedProperty = connection.Get("SMS_EmbeddedProperty").Spawninstance_()  
                If l = 0 Then  
                    ' Create an array to copy to.  
                    updatedProps = array(embeddedProperty)  
                    Redim updatedProps(Ubound(resource.Props)-1)  
                End If  
                ' Copy the element.  
                embeddedProperty.PropertyName = resource.Props(l).PropertyName  
                embeddedProperty.Value = resource.Props(l).value  
                embeddedProperty.Value1 = resource.Props(l).value1  
                embeddedProperty.Value2 = resource.Props(l).value2  

                Set updatedProps(n) = embeddedProperty  
                n = n + 1  
          End If    
        Next    

        ' Update  
        resource.Props = updatedProps  
        resource.Put_, context  

        WScript.Echo         

        ' Check that the property has been deleted.   
        If  GetScfEmbeddedProperty(resource,"Test2",value,value1,value2) = True Then  
            WScript.Echo "Property found"  
        Else  
            WScript.Echo "Property not found"  
        End If      

        WScript.Echo   

    ' Embedded property list.  

        WScript.Echo "Embedded property list"  
        WScript.Echo "----------------------"  

        Dim values  
        values = Array("Tiger","Wolf")  

        Call WriteScfEmbeddedPropertyList(connection,context,resource,"Animals",values)  

        Dim retrievedValues   

        If GetScfEmbeddedPropertyList(resource,"Animals",retrievedValues) = True Then  
            Dim i,c  
            Dim updatedValues  

            c = 0   

            ' Display the list and remove the property Tiger.  
            updatedValues = Array(UBound(retrievedValues)-1)  
            For i = 0 To  UBound (retrievedValues)  
                 Wscript.Echo retrievedValues(i)  
                 If retrievedValues(i) <> "Tiger" Then  

                    updatedValues(c) = retrievedValues(i)  
                    c = c + 1  
                 End If     
            Next  

            WScript.Echo  
            ' Update the property list.  
            Call WriteScfEmbeddedPropertyList(connection,context,resource,"Animals",updatedValues)  

            ' Get the property list and display.  
            Call GetScfEmbeddedPropertyList(resource,"Animals",retrievedValues)  

            For i = 0 To  UBound (retrievedValues)  
                 Wscript.Echo retrievedValues(i)  
             Next  
        Else  
            WScript.Echo "Not found"  
        End If   

        WScript.Echo          

    ' RegMultiString list.          

        WScript.Echo "Embedded RegMultiString list"  
        WScript.Echo "----------------------------"  

        Dim valueStrings  
        valueStrings= Array("Lisa","Julie")  

        ' Write the RegMultiString list.  
        Call WriteScfRegMultiStringList(connection,context,resource,"Names2",valueStrings)  

        Dim retrievedValueStrings   

        ' Get the RegMultiString list.            
        If GetScfRegMultiStringList(resource,"Names2",retrievedValueStrings) = True Then  

            Dim updatedValueStrings  

            c = 0   
            updatedValueStrings = Array(Ubound(retrievedValueStrings)-1)  
            For i = 0 To UBound (retrievedValueStrings)  
                 Wscript.Echo retrievedValueStrings(i)  
                 if retrievedValueStrings(i) <> "Lisa" Then  
                    updatedValueStrings(c) = retrievedValueStrings(i)  
                 End If  
            Next   

            Call WriteScfRegMultiStringList(connection,context,resource,"Names",updatedValueStrings)  

            WScript.Echo   

            Call GetScfRegMultiStringList(resource,"Names",retrievedValueStrings)  

            For i = 0 To UBound (retrievedValueStrings)  
                 Wscript.Echo retrievedValueStrings(i)  
             Next   
        Else  
            WScript.Echo "Not found"              
        End If     
    Next  

    ' Commit the changes.  
    Set inParams = connection.Get("SMS_SiteControlFile").Methods_("CommitSCF").InParameters.SpawnInstance_  
    inParams.SiteCode = siteCode  
    connection.ExecMethod "SMS_SiteControlFile", "CommitSCF", inParams, , context  

    ' Release the session handle.  
    Set inParams = connection.Get("SMS_SiteControlFile").Methods_("ReleaseSessionHandle").InParameters.SpawnInstance_  
    inParams.SessionHandle = context.Item("SessionHandle")  
    connection.ExecMethod "SMS_SiteControlFile", "ReleaseSessionHandle", inParams    
End Sub  

El método de ejemplo tiene los parámetros siguientes:

Parámetro Tipo Descripción
connection - SWbemServices Una conexión válida al proveedor de SMS.
siteCode - String Código de sitio para el sitio de Configuration Manager.

Compilar el código

Este ejemplo de C# requiere:

Espacios de nombres

System

System.Collections.Generic

System.Collections

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Ensamblado

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

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

Instrumental de administración de Windows
Acerca del archivo de control de sitio Configuration Manager
Cómo leer una lista de propiedades incrustadas Configuration Manager archivo de control de sitio