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


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

A Configuration Managerben 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: A Configuration Manager kódrészleteinek meghí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

További információ a hibakezelésről: Tudnivalók a Configuration Manager hibáiról.

.NET-keretrendszer biztonsága

További információ a Configuration Manager-alkalmazások biztonságossá tételéről: Configuration Manager szerepköralapú felügyelet.

Lásd még

Windows Management Instrumentation
Tudnivalók a Configuration Manager helyvezérlő fájljáról
A Configuration Manager helyvezérlő fájljának beágyazott tulajdonságlistájának olvasása