Dela via


Läsa och skriva till Configuration Manager-platskontrollfilen med hjälp av WMI

I Configuration Manager skriver du till platskontrollfilen med hjälp av WMI (Windows Management Instrumentation) med hjälp av klassmetoderna SMS_SiteControlFile .

När du skriver till platskontrollfilen med hjälp av WMI använder du ett sessionshandtag för att identifiera ditt program. Detta används för att hantera samtidiga uppdateringar av filen.

När du är klar med att skriva till platskontrollfilen måste du checka in ändringarna.

SMS_SiteControlFile har följande metoder för att hantera ändringar i platskontrollfilen.

Metod Beskrivning
CommitSCF Tillämpar ändringarna på Configuration Manager-databasen.
RefreshSCF Uppdaterar den minnesinterna kopian av platskontrollfilen med de senaste ändringarna från Configuration Manager-databasen.
GetSessionHandle Hämtar din minnesintern kopia av platskontrollfilen och ett sessionshandtag. Du placerar sessionshandtaget i ett IWbemContext objekt som skickas till alla IWbemServices metoder.
ReleaseSessionHandle Släpper din minnesintern kopia av platskontrollfilen och alla resurser som är associerade med sessionshandtaget.

Försiktighet

Du bör ha erfarenhet av att hantera en platskonfiguration innan du använder SMS-providerklasserna för att ändra platskonfigurationen. Du kan orsaka stor skada på en webbplats genom att ändra vissa konfigurerbara objekt. Du bör vara mycket försiktig eller undvika att använda klasserna SMS_SCI_FileDefinition och SMS_SCI_SiteDefinition helt och hållet. De här klasserna hanterar själva platskontrollfilen. Om du inte är försiktig kan du göra webbplatsen värdelös.

Skriva till platskontrollfilen

  1. Konfigurera en anslutning till SMS-providern. Mer information finns i grunderna för SMS-provider.

  2. Skapa ett SWbemNameValue värde som ska innehålla dina kontextdata.

  3. Hämta en sessionsreferens från SMS_SiteControlFile klassen GetSessionHandle.

  4. Lägg till sessionshandtaget i dina kontextdata.

  5. Anropa objektet SMS_SiteControlFileRefreshSCF för att hämta den senaste kopian av platskontrollfilen. Använd kontextdata i anropet.

  6. Fråga efter den platskontrollfilresurs som du vill uppdatera med hjälp av dina kontextdata.

  7. Uppdatera resursen med hjälp av dina kontextdata.

  8. Checka in ändringarna i platskontrollfilen med hjälp av SMS_SiteControlFile objektmetoden CommitSCF .

  9. SMS_SiteControlFile Anropa objektmetoden ReleaseSessionHandle för att frigöra sessionshandtaget.

Exempel

I följande VBScript-exempel får du åtkomst till klientagentkomponenten i platskontrollfilen och skapar en dummy-egenskap, egenskapslista och lista med flera strängar. Sedan tar den bort de uppdateringar som har gjorts. Exemplet visar hur du konfigurerar sessionshandtaget, hämtar platskontrollfilen, frågar platskontrollfilen, gör uppdateringar och genomför ändringar i platskontrollfilen.

I exemplet är egenskapen LocaleID hårdkodad till engelska (USA). Om du behöver nationella inställningar för icke-USA installationer kan du hämta den från egenskapen SMS_Identification Server WMI ClassLocaleID .

Information om hur du anropar exempelkoden finns i Anropa Configuration Manager-kodfragment.

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  

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
connection - SWbemServices En giltig anslutning till SMS-providern.
siteCode - String Platskoden för Configuration Manager-platsen.

Kompilera koden

Det här C#-exemplet kräver:

Namnområden

System

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Församling

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robust programmering

Mer information om felhantering finns i Om Configuration Manager-fel.

.NET Framework Security

Mer information om hur du skyddar Configuration Manager-program finns i Rollbaserad administration i Configuration Manager.

Se även

Windows Management Instrumentation
Om Configuration Manager-platskontrollfilen
Läsa en egenskapslista för Configuration Manager Site Control File Embedded