Partager via


Guide pratique pour lire et écrire dans le fichier de contrôle de site Configuration Manager à l’aide de WMI

Dans Configuration Manager, vous écrivez dans le fichier de contrôle de site à l’aide de WMI (Windows Management Instrumentation) à l’aide des méthodes de classe SMS_SiteControlFile .

Lorsque vous écrivez dans le fichier de contrôle de site à l’aide de WMI, vous utilisez un handle de session pour identifier votre application. Il est utilisé pour gérer les mises à jour simultanées du fichier.

Une fois que vous avez terminé d’écrire dans le fichier de contrôle de site, vous devez valider vos modifications.

SMS_SiteControlFile dispose des méthodes suivantes pour gérer les modifications apportées au fichier de contrôle de site.

Méthode Description
CommitSCF Applique vos modifications à la base de données Configuration Manager.
RefreshSCF Actualise votre copie en mémoire du fichier de contrôle de site avec les modifications récentes apportées à la base de données Configuration Manager.
GetSessionHandle Obtient votre copie en mémoire du fichier de contrôle de site et d’un handle de session. Vous placez le handle de session dans un IWbemContext objet qui est passé à toutes les IWbemServices méthodes.
ReleaseSessionHandle Libère votre copie en mémoire du fichier de contrôle de site et de toutes les ressources associées à votre handle de session.

Attention

Vous devez avoir de l’expérience dans la gestion de la configuration d’un site avant d’utiliser les classes du fournisseur SMS pour modifier la configuration du site. Vous pouvez causer des dommages importants à un site en modifiant certains éléments configurables. Vous devez faire preuve d’une extrême prudence ou éviter d’utiliser complètement les SMS_SCI_FileDefinition classes et SMS_SCI_SiteDefinition . Ces classes gèrent le fichier de contrôle de site lui-même. Si vous ne faites pas attention, vous pouvez rendre le site inutile.

Pour écrire dans le fichier de contrôle de site

  1. Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez Notions de base du fournisseur SMS.

  2. Créez une SWbemNameValue valeur définie pour contenir vos données de contexte.

  3. Obtenez un handle de session à partir de la SMS_SiteControlFile classe GetSessionHandle.

  4. Ajoutez le handle de session à vos données de contexte.

  5. Appelez l’objet SMS_SiteControlFileRefreshSCF pour obtenir la dernière copie du fichier de contrôle de site. Utilisez les données de contexte dans l’appel.

  6. Interrogez la ressource de fichier de contrôle de site que vous souhaitez mettre à jour à l’aide de vos données de contexte.

  7. Mettez à jour la ressource à l’aide de vos données de contexte.

  8. Validez vos modifications dans le fichier de contrôle de site à l’aide de la SMS_SiteControlFile méthode object CommitSCF .

  9. Appelez la méthode d’objet SMS_SiteControlFileReleaseSessionHandle pour libérer votre handle de session.

Exemple

L’exemple VBScript suivant accède au composant agent client du fichier de contrôle de site et crée une propriété factice, une liste de propriétés et une liste à chaînes multiples. Il supprime ensuite les mises à jour qui ont été effectuées. L’exemple montre comment configurer le handle de session, obtenir le fichier de contrôle de site, interroger le fichier de contrôle de site, effectuer des mises à jour et valider les modifications apportées au fichier de contrôle de site.

Dans l’exemple, la LocaleID propriété est codée en dur en anglais (États-Unis). Si vous avez besoin des paramètres régionaux pour les non-États-Unis vous pouvez l’obtenir à partir de la propriété classe LocaleIDWMI du serveur SMS_Identification.

Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code 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  

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
connection - SWbemServices Connexion valide au fournisseur SMS.
siteCode - String Code de site pour le site Configuration Manager.

Compilation du code

Cet exemple C# nécessite :

Espaces de noms

Système

System.Collections.Generic

System.Collections

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmation robuste

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.

Sécurité de .NET Framework

Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager’administration basée sur les rôles.

Voir aussi

Windows Infrastructure de gestion
À propos du fichier de contrôle de site Configuration Manager
Guide pratique pour lire une liste de propriétés incorporées d’un fichier de contrôle de site Configuration Manager