Lezen en schrijven naar het Configuration Manager sitebeheerbestand met behulp van WMI

In Configuration Manager schrijft u naar het sitebeheerbestand met behulp van Windows Management Instrumentation (WMI) met behulp van de SMS_SiteControlFile klassemethoden.

Wanneer u met behulp van WMI naar het sitebeheerbestand schrijft, gebruikt u een sessie-ingang om uw toepassing te identificeren. Dit wordt gebruikt voor het beheren van gelijktijdige updates van het bestand.

Wanneer u klaar bent met het schrijven naar het sitebeheerbestand, moet u uw wijzigingen doorvoeren.

SMS_SiteControlFile heeft de volgende methoden om wijzigingen in het sitebeheerbestand te beheren.

Methode Beschrijving
CommitSCF Past uw wijzigingen toe op de Configuration Manager-database.
RefreshSCF Hiermee vernieuwt u uw in-memory kopie van het sitebeheerbestand met recente wijzigingen in de Configuration Manager-database.
GetSessionHandle Hiermee haalt u uw in-memory kopie van het sitebeheerbestand en een sessie-ingang op. U plaatst de sessie-ingang in een IWbemContext object dat wordt doorgegeven aan alle IWbemServices methoden.
ReleaseSessionHandle Geeft uw in-memory kopie van het sitebeheerbestand en eventuele resources die zijn gekoppeld aan uw sessie-ingang vrij.

Voorzichtigheid

U moet ervaring hebben met het beheren van de configuratie van een site voordat u de sms-providerklassen gebruikt om de siteconfiguratie te wijzigen. U kunt een site grote schade toebrengen door enkele configureerbare items te wijzigen. U moet uiterst voorzichtig zijn of de SMS_SCI_FileDefinition klassen en SMS_SCI_SiteDefinition helemaal niet gebruiken. Met deze klassen wordt het sitebeheerbestand zelf beheerd. Als u niet voorzichtig bent, kunt u de site nutteloos maken.

Schrijven naar het sitebeheerbestand

  1. Een verbinding met de SMS-provider instellen. Zie Basisprincipes van SMS-provider voor meer informatie.

  2. Maak een SWbemNameValue waardeset voor het opslaan van uw contextgegevens.

  3. Haal een sessie-ingang op van SMS_SiteControlFile de klasse GetSessionHandle.

  4. Voeg de sessie-ingang toe aan uw contextgegevens.

  5. Roep het SMS_SiteControlFile object RefreshSCF aan om de meest recente kopie van het sitebeheerbestand op te halen. Gebruik de contextgegevens in de aanroep.

  6. Voer een query uit voor de sitebeheerbestandsresource die u wilt bijwerken met behulp van uw contextgegevens.

  7. Werk de resource bij met behulp van uw contextgegevens.

  8. Voer uw wijzigingen door in het sitebeheerbestand met behulp van de SMS_SiteControlFile objectmethode CommitSCF .

  9. Roep de SMS_SiteControlFile objectmethode ReleaseSessionHandle aan om de sessie-ingang vrij te geven.

Voorbeeld

Het volgende VBScript-voorbeeld heeft toegang tot het clientagentonderdeel van het sitebeheerbestand en maakt een dummy-eigenschap, eigenschappenlijst en lijst met meerdere tekenreeksen. Vervolgens worden de aangebrachte updates verwijderd. In het voorbeeld ziet u hoe u de sessie-ingang instelt, het sitebeheerbestand opvraagt, het sitebeheerbestand opvraagt, updates aanbrengt en wijzigingen doorvoert in het sitebeheerbestand.

In het voorbeeld is de LocaleID eigenschap vastgelegd in het Engels (VS). Als u de landinstelling nodig hebt voor niet-Amerikaanse installaties kunt u deze ophalen via de WMI-klasse-eigenschapLocaleID SMS_Identification-server.

Zie Aanroepen Configuration Manager codefragmenten voor meer informatie over het aanroepen van de voorbeeldcode.

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  

De voorbeeldmethode heeft de volgende parameters:

Parameter Type Beschrijving
connection - SWbemServices Een geldige verbinding met de SMS-provider.
siteCode - String De sitecode voor de Configuration Manager site.

De code compileren

Voor dit C#-voorbeeld is het volgende vereist:

Naamruimten

Systeem

System.Collections.Generic

System.Collections

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Vergadering

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robuust programmeren

Zie Over Configuration Manager fouten voor meer informatie over foutafhandeling.

.NET Framework Beveiliging

Zie Configuration Manager op rollen gebaseerd beheer voor meer informatie over het beveiligen van Configuration Manager toepassingen.

Zie ook

Windows Management Instrumentation
Over het Configuration Manager sitebeheerbestand
Een lijst met ingesloten eigenschappen van Configuration Manager sitebeheerbestand lezen