Compartilhar via


How to Read and Write to the Configuration Manager Site Control File by Using WMI (Como Ler e Escrever no Ficheiro de Controlo de Sites do Configuration Manager através da WMI)

No Configuration Manager, escreve no ficheiro de controlo do site com o Windows Management Instrumentation (WMI) através dos SMS_SiteControlFile métodos de classe.

Ao escrever no ficheiro de controlo do site com a WMI, utiliza um identificador de sessão para identificar a sua aplicação. Isto é utilizado para gerir atualizações simultâneas ao ficheiro.

Quando terminar de escrever no ficheiro de controlo do site, tem de consolidar as alterações.

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

Método Descrição
CommitSCF Aplica as suas alterações à base de dados Configuration Manager.
RefreshSCF Atualiza a cópia dentro da memória do ficheiro de controlo do site com quaisquer alterações recentes da base de dados Configuration Manager.
GetSessionHandle Obtém a cópia dentro da memória do ficheiro de controlo do site e um identificador de sessão. Coloca a alça de sessão num IWbemContext objeto transmitido a todos os IWbemServices métodos.
ReleaseSessionHandle Liberta a cópia dentro da memória do ficheiro de controlo do site e quaisquer recursos associados ao identificador de sessão.

Cuidado

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

Para escrever no ficheiro de controlo do site

  1. Configure uma ligação ao Fornecedor de SMS. Para obter mais informações, veja Noções básicas do Fornecedor de SMS.

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

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

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

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

  6. Consulte o recurso de ficheiro de controlo de site que pretende atualizar com os dados de contexto.

  7. Atualize o recurso com os dados de contexto.

  8. Consolide as alterações ao ficheiro de controlo do site com o método de SMS_SiteControlFile objeto CommitSCF .

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

Exemplo

O exemplo de VBScript seguinte acede ao componente do agente cliente do ficheiro de controlo do site e cria uma propriedade fictícia, uma lista de propriedades e uma lista de várias cadeias. Em seguida, remove as atualizações que foram efetuadas. O exemplo demonstra como configurar o identificador de sessão, obter o ficheiro de controlo do site, consultar o ficheiro de controlo do site, fazer atualizações e consolidar alterações ao ficheiro de controlo do site.

No exemplo, a LocaleID propriedade é hard-coded para inglês (E.U.A.). Se precisar da região para não E.U.A. instalações, pode obtê-la a partir da propriedade Classe LocaleIDWMI de Servidor SMS_Identification.

Para obter informações sobre como chamar o código de exemplo, veja Chamar Configuration Manager Fragmentos 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 ligação válida ao Fornecedor de SMS.
siteCode - String O código do site do Configuration Manager site.

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 processamento de erros, veja About Configuration Manager Errors (Acerca dos Erros de Configuration Manager).

Segurança do .NET Framework

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

Confira também

Instrumentação de Gestãodo Windows Acerca do Ficheiro de Controlo de Site Configuration ManagerComo Ler uma Lista de Propriedades Incorporadas de Ficheiros de Controlo de Sites Configuration Manager