Megosztás a következőn keresztül:


A Configuration Manager helyvezérlő fájl olvasása és írása WMI használatával

A Configuration Manager a helyvezérlő fájlba ír a Windows Management Instrumentation (WMI) használatával az SMS_SiteControlFile osztály metódusainak használatával.

Amikor WMI használatával ír a helyvezérlő fájlba, egy munkamenet-leíróval azonosítja az alkalmazást. Ez a fájl egyidejű frissítéseinek kezelésére szolgál.

Ha befejezte a webhelyvezérlő fájlba való írást, véglegesítenie kell a módosításokat.

SMS_SiteControlFile a következő módszerekkel kezelheti a helyvezérlő fájl módosításait.

Módszer Leírás
CommitSCF Alkalmazza a módosításokat a Configuration Manager-adatbázisra.
RefreshSCF Frissíti a helyvezérlő fájl memóriabeli másolatát a Configuration Manager adatbázis legutóbbi módosításaival.
GetSessionHandle Lekéri a helyvezérlő fájl memóriában tárolt példányát és egy munkamenet-leírót. A munkamenet-leírót az IWbemContext összes IWbemServices metódusnak átadott objektumba helyezi.
ReleaseSessionHandle Felszabadítja a helyvezérlő fájl memóriában tárolt példányát és a munkamenet-leíróhoz társított erőforrásokat.

Figyelem!

Mielőtt az SMS Provider osztályokkal módosítaná a hely konfigurációját, tapasztaltnak kell lennie a hely konfigurációjának kezelésében. Néhány konfigurálható elem módosításával nagy kárt okozhat a webhelyeknek. Rendkívül körültekintően járjon el, vagy kerülje a és SMS_SCI_SiteDefinition az SMS_SCI_FileDefinition osztály használatát. Ezek az osztályok kezelik magát a helyvezérlő fájlt. Ha nem óvatos, a webhelyet használhatatlanná teheti.

Írás a webhelyvezérlő fájlba

  1. Állítson be egy kapcsolatot az SMS-szolgáltatóval. További információ: Az SMS-szolgáltató alapjai.

  2. Hozzon létre egy SWbemNameValue értékkészletet a környezeti adatok tárolásához.

  3. Munkamenet-leíró lekérése a osztályból SMS_SiteControlFileGetSessionHandle.

  4. Adja hozzá a munkamenet-leírót a környezeti adatokhoz.

  5. Hívja meg az SMS_SiteControlFile objektumot RefreshSCF a helyvezérlő fájl legújabb példányának lekéréséhez. Használja a hívás környezeti adatait.

  6. Kérdezze le a frissíteni kívánt helyvezérlőfájl-erőforrást a környezeti adatokkal.

  7. Frissítse az erőforrást a környezeti adatokkal.

  8. Véglegesítse a módosításokat a helyvezérlő fájlban az SMS_SiteControlFile objektummetódus CommitSCF használatával.

  9. Hívja meg az SMS_SiteControlFile objektummetódust ReleaseSessionHandle a munkamenet-leíró felszabadításához.

Példa

Az alábbi VBScript-példa hozzáfér a helyvezérlő fájl ügyfélügynök összetevőéhez, és létrehoz egy üres tulajdonságot, tulajdonságlistát és többsztringes listát. Ezután eltávolítja a végrehajtott frissítéseket. A példa bemutatja, hogyan állíthatja be a munkamenet-leírót, hogyan szerezheti be a helyvezérlő fájlt, kérdezheti le a helyvezérlő fájlt, végezhet frissítéseket és véglegesíthet módosításokat a helyvezérlő fájlban.

A példában a LocaleID tulajdonság angol (USA) kódolású. Ha nem egyesült államokbeli területi beállításra van szüksége telepítéseket, a SMS_Identification kiszolgálói WMI-osztályLocaleID tulajdonságból szerezheti be.

A mintakód meghívásával kapcsolatos információkért lásd: Configuration Manager Kódrészletek hívása.

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

A példametódus a következő paraméterekkel rendelkezik:

Paraméter Típus Leírás
connection - SWbemServices Érvényes kapcsolat az SMS-szolgáltatóval.
siteCode - String A Configuration Manager hely helykódja.

A kód fordítása

Ehhez a C#-példához a következőre van szükség:

Névterek

Rendszer

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Összeszerelés

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robusztus programozás

A hibakezeléssel kapcsolatos további információkért lásd: A Configuration Manager hibák ismertetése.

.NET-keretrendszer Security

A Configuration Manager alkalmazások biztonságossá tételével kapcsolatos további információkért lásd: Configuration Manager szerepköralapú felügyelet.

Lásd még

Windows Management InstrumentationA Configuration Manager helyvezérlő fájlrólConfiguration Manager helyvezérlő fájl beágyazott tulajdonságlistájának olvasása