Come leggere e scrivere nel file di controllo del sito di Configuration Manager usando WMI

In Configuration Manager si scrive nel file di controllo del sito usando Strumentazione gestione Windows (WMI) usando i metodi della SMS_SiteControlFile classe .

Quando si scrive nel file di controllo del sito usando WMI, si usa un handle di sessione per identificare l'applicazione. Viene usato per gestire gli aggiornamenti simultanei del file.

Al termine della scrittura nel file di controllo del sito, è necessario eseguire il commit delle modifiche.

SMS_SiteControlFile dispone dei metodi seguenti per gestire le modifiche al file di controllo del sito.

Metodo Descrizione
CommitSCF Applica le modifiche apportate al database di Configuration Manager.
RefreshSCF Aggiorna la copia in memoria del file di controllo del sito con eventuali modifiche recenti apportate dal database di Configuration Manager.
GetSessionHandle Ottiene la copia in memoria del file di controllo del sito e un handle di sessione. L'handle di sessione viene inserito in un IWbemContext oggetto passato a tutti i IWbemServices metodi.
ReleaseSessionHandle Rilascia la copia in memoria del file di controllo del sito e tutte le risorse associate all'handle di sessione.

Attenzione

È consigliabile avere esperienza nella gestione della configurazione di un sito prima di usare le classi del provider SMS per modificare la configurazione del sito. È possibile causare gravi danni a un sito modificando alcuni elementi configurabili. È consigliabile usare estrema cautela o evitare di usare completamente le SMS_SCI_FileDefinition classi e SMS_SCI_SiteDefinition . Queste classi gestiscono il file di controllo del sito stesso. Se non si è attenti, è possibile rendere il sito inutile.

Per scrivere nel file di controllo del sito

  1. Configurare una connessione al provider SMS. Per altre informazioni, vedere Nozioni fondamentali sul provider SMS.

  2. Creare un SWbemNameValue valore impostato per contenere i dati di contesto.

  3. Ottenere un handle di sessione dalla SMS_SiteControlFile classe GetSessionHandle.

  4. Aggiungere l'handle di sessione ai dati di contesto.

  5. Chiamare l'oggetto SMS_SiteControlFileRefreshSCF per ottenere la copia più recente del file di controllo del sito. Usare i dati di contesto nella chiamata.

  6. Eseguire una query per la risorsa file di controllo del sito da aggiornare usando i dati di contesto.

  7. Aggiornare la risorsa usando i dati di contesto.

  8. Eseguire il commit delle modifiche apportate al file di controllo del sito usando il metodo dell'oggetto SMS_SiteControlFileCommitSCF .

  9. Chiamare il metodo dell'oggetto SMS_SiteControlFileReleaseSessionHandle per rilasciare l'handle di sessione.

Esempio

L'esempio VBScript seguente accede al componente agente client del file di controllo del sito e crea una proprietà fittizia, un elenco di proprietà e un elenco di più stringhe. Rimuove quindi gli aggiornamenti eseguiti. L'esempio illustra come configurare l'handle di sessione, ottenere il file di controllo del sito, eseguire query sul file di controllo del sito, apportare aggiornamenti e eseguire il commit delle modifiche al file di controllo del sito.

Nell'esempio la LocaleID proprietà è hardcoded in inglese (Stati Uniti). Se sono necessarie le impostazioni locali per gli stati non statunitensi installazioni, è possibile ottenerlo dalla proprietà SMS_Identification Server WMI ClassLocaleID .

Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice di 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  

Il metodo di esempio include i parametri seguenti:

Parametro Tipo Descrizione
connection - SWbemServices Connessione valida al provider SMS.
siteCode - String Codice del sito per il sito di Configuration Manager.

Compilazione del codice

Questo esempio C# richiede:

Spazi dei nomi

Sistema

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmazione efficiente

Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.

Sicurezza di .NET Framework

Per altre informazioni sulla protezione delle applicazioni di Configuration Manager, vedere Amministrazione basata sui ruoli di Configuration Manager.

Vedere anche

Strumentazione gestione Windows
Informazioni sul file di controllo del sito di Configuration Manager
Come leggere un elenco di proprietà incorporate del file di controllo del sito di Configuration Manager