Dela via


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

I Configuration Manager skriver du till platskontrollfilen med hjälp av WMI (Windows Management Instrumentation) med hjälp av klassmetodernaSMS_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 den 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 Säkerhet

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

Se även

Windows Management InstrumentationOm Configuration Manager platskontrollfilSå här läser du en Configuration Manager webbplatskontrollfil inbäddad egenskapslista