Compartilhar via


Como ler e gravar no arquivo de controle de site Configuration Manager usando o WMI

Em Configuration Manager, você grava no arquivo de controle do site usando a WMI (Instrumentação de Gerenciamento do Windows) usando os métodos de SMS_SiteControlFile classe.

Ao gravar no arquivo de controle do site usando o WMI, você usa um identificador de sessão para identificar seu aplicativo. Isso é usado para gerenciar atualizações simultâneas para o arquivo.

Quando terminar de gravar no arquivo de controle do site, você deverá confirmar suas alterações.

SMS_SiteControlFile tem os seguintes métodos para gerenciar alterações no arquivo de controle do site.

Método Descrição
CommitSCF Aplica suas alterações ao banco de dados Configuration Manager.
RefreshSCF Atualiza a cópia na memória do arquivo de controle do site com alterações recentes do banco de dados Configuration Manager.
GetSessionHandle Obtém sua cópia na memória do arquivo de controle do site e um identificador de sessão. Você coloca o identificador de sessão em um IWbemContext objeto que é passado para todos os IWbemServices métodos.
ReleaseSessionHandle Libera sua cópia na memória do arquivo de controle do site e todos os recursos associados ao identificador de sessão.

Cuidado

Você deve ter experiência em gerenciar a configuração de um site antes de usar as classes do Provedor de SMS para modificar a configuração do site. Você pode causar grandes danos a um site alterando alguns itens configuráveis. Você deve usar extrema cautela ou evitar usar as SMS_SCI_FileDefinition classes e SMS_SCI_SiteDefinition completamente. Essas classes gerenciam o próprio arquivo de controle do site. Se você não tiver cuidado, poderá tornar o site inútil.

Para gravar no arquivo de controle do site

  1. Configure uma conexão com o Provedor de SMS. Para obter mais informações, confira Os fundamentos do Provedor de SMS.

  2. Crie um SWbemNameValue valor definido para manter seus dados de contexto.

  3. Obtenha um identificador de sessão da SMS_SiteControlFile classe GetSessionHandle.

  4. Adicione o identificador de sessão aos dados de contexto.

  5. Chame o SMS_SiteControlFile objeto RefreshSCF para obter a cópia mais recente do arquivo de controle do site. Use os dados de contexto na chamada.

  6. Consulta para o recurso de arquivo de controle de site que você deseja atualizar usando seus dados de contexto.

  7. Atualize o recurso usando seus dados de contexto.

  8. Confirme suas alterações no arquivo de controle do site usando o método de SMS_SiteControlFile objeto CommitSCF .

  9. Chame o método do SMS_SiteControlFile objeto ReleaseSessionHandle para liberar o identificador de sessão.

Exemplo

O exemplo VBScript a seguir acessa o componente do agente cliente do arquivo de controle do site e cria uma propriedade fictícia, uma lista de propriedades e uma lista de várias cadeias de caracteres. Em seguida, ele remove as atualizações que foram feitas. O exemplo demonstra como configurar o identificador de sessão, obter o arquivo de controle do site, consultar o arquivo de controle do site, fazer atualizações e confirmar alterações no arquivo de controle do site.

No exemplo, a LocaleID propriedade é codificada em código para inglês (EUA). Se você precisar da localidade para não-EUA. instalações, você pode obtê-lo na propriedade classe LocaleIDWMI do servidor SMS_Identification.

Para obter informações sobre como chamar o código de exemplo, consulte Chamando Configuration Manager Snippets de Código.

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  

O método de exemplo tem os seguintes parâmetros:

Parâmetro Tipo Descrição
connection - SWbemServices Uma conexão válida com o provedor de SMS.
siteCode - String O código do site do site Configuration Manager.

Compilando o código

Este exemplo de C# requer:

Namespaces

System

System.Collections.Generic

System.Collections

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.

Segurança do .NET Framework

Para obter mais informações sobre como proteger aplicativos Configuration Manager, consulte Configuration Manager administração baseada em função.

Confira também

Instrumentação de gerenciamento do Windows
Sobre o arquivo de controle de site Configuration Manager
Como ler uma lista de propriedades integradas de arquivo de controle de site Configuration Manager