Partilhar via


Como ler e escrever para o ficheiro de controlo do site do gestor de configuração usando o WMI

No Gestor de Configuração, escreve para o ficheiro de controlo do site utilizando Windows Instrumentação de Gestão (WMI) utilizando os métodos de SMS_SiteControlFile classe.

Ao escrever para o ficheiro de controlo do site utilizando o WMI, utilize uma pega de sessão para identificar a sua aplicação. Isto é usado para gerir atualizações simultâneas para o ficheiro.

Quando terminar de escrever no ficheiro de controlo do site, deve cometer as suas alterações.

SMS_SiteControlFile tem os seguintes métodos para gerir as alterações no ficheiro de controlo do site.

Método Descrição
CommitSCF Aplica as alterações na base de dados Do Gestor de Configurações.
RefreshSCF Refresca a sua cópia na memória do ficheiro de controlo do site com quaisquer alterações recentes a partir da base de dados do Gestor de Configuração.
GetSessionHandle Obtém a sua cópia na memória do ficheiro de controlo do site e uma pega de sessão. Coloque o cabo da sessão num IWbemContext objeto que é passado a todos os IWbemServices métodos.
ReleaseSessionHandle Liberta a sua cópia na memória do ficheiro de controlo do site e quaisquer recursos associados ao seu manípulo de sessão.

Atenção

Deve ter experiência na gestão da configuração de um site antes de utilizar as classes SMS Provider para modificar a configuração do site. Pode causar grandes danos a um site alterando alguns itens configuráveis. Deve ter muito cuidado ou evitar a utilização total das SMS_SCI_FileDefinition SMS_SCI_SiteDefinition aulas. Estas classes gerem o ficheiro de controlo do site em si. Se não tiver cuidado, pode tornar o site inútil.

Para escrever para o ficheiro de controlo do site

  1. Configurar uma ligação com o Fornecedor DE SMS. Para mais informações, consulte os fundamentos do Fornecedor de SMS.

  2. Crie um SWbemNameValue conjunto de valor para conter os seus dados de contexto.

  3. Obtenha uma pega de sessão da SMS_SiteControlFile GetSessionHandle aula.

  4. Adicione o cabo da sessão aos dados de contexto.

  5. Ligue para o SMS_SiteControlFile objeto para obter a cópia mais recente do ficheiro de controlo do RefreshSCF site. Use os dados de contexto na chamada.

  6. Consulta para o recurso de ficheiro de controlo do site que pretende atualizar usando os seus dados de contexto.

  7. Atualize o recurso utilizando os seus dados de contexto.

  8. Comprometa as alterações no ficheiro de controlo do site utilizando o método do SMS_SiteControlFile CommitSCF objeto.

  9. Ligue para o método do SMS_SiteControlFile objeto para libertar o ReleaseSessionHandle manípulo da sessão.

Exemplo

O exemplo VBScript seguinte acede ao componente do agente cliente do ficheiro de controlo do site e cria uma lista de propriedades falsas, lista de propriedades e multi-cordas. Em seguida, remove as atualizações que foram feitas. O exemplo demonstra como configurar o manípulo da sessão, obter o ficheiro de controlo do site, consultar o ficheiro de controlo do site, fazer atualizações e comprometer alterações no ficheiro de controlo do site.

No exemplo, a LocaleID propriedade é codificada para inglês (EUA). Se precisar do local para não-EUA. instalações, você pode obtê-lo a partir da propriedade classe WMI do SMS_Identification servidor. LocaleID

Para obter informações sobre a chamada do código de amostra, consulte o Código de Identificação do Gestor de Chamadas.

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 exemplo tem os seguintes parâmetros:

Parâmetro Tipo Description
connection - SWbemServices Uma ligação válida ao Fornecedor de SMS.
siteCode - String O código do site do site do Gestor de Configuração.

A Compilar o Código

Este exemplo C# requer:

Espaços de nomes

Sistema

System.Collections.Generic

Sistema.Coleções

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assemblagem

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programação Robusta

Para obter mais informações sobre o tratamento de erros, consulte Sobre erros do Gestor de Configuração.

Segurança do .NET Framework

Para obter mais informações sobre a segurança das aplicações do Gestor de Configuração, consulte a administração baseada em funções do Gestor de Configuração.

Consulte também

Windows Instrumentação de Gestão
Sobre o Ficheiro de Controlo do Site do Gestor de Configuração
Como ler uma lista de propriedades incorporada do ficheiro de controlo do site do gestor de configuração