Поделиться через


Чтение и запись в файл элемента управления сайтом Configuration Manager с помощью WMI

В Configuration Manager выполняется запись в файл элемента управления сайтом с помощью инструментария управления Windows (WMI) с помощью SMS_SiteControlFile методов класса .

При записи в файл элемента управления сайта с помощью WMI для идентификации приложения используется дескриптор сеанса. Используется для управления одновременными обновлениями файла.

Завершив запись в файл элемента управления сайтом, необходимо зафиксировать изменения.

SMS_SiteControlFile имеет следующие методы для управления изменениями в файле элемента управления сайтом.

Метод Описание
CommitSCF Применяет изменения к базе данных Configuration Manager.
RefreshSCF Обновляет в памяти копию файла элемента управления сайтом с помощью последних изменений из базы данных Configuration Manager.
GetSessionHandle Получает в памяти копию файла элемента управления сайтом и дескриптора сеанса. Дескриптор сеанса помещается в IWbemContext объект, который передается всем IWbemServices методам.
ReleaseSessionHandle Освобождает в памяти копию файла элемента управления сайтом и все ресурсы, связанные с дескриптором сеанса.

Предостережение

Прежде чем использовать классы поставщика SMS для изменения конфигурации сайта, необходимо иметь опыт управления конфигурацией сайта. Вы можете нанести большой вред сайту, изменив некоторые настраиваемые элементы. Следует соблюдать осторожность или избегать использования SMS_SCI_FileDefinition классов и SMS_SCI_SiteDefinition в целом. Эти классы управляют самим файлом элемента управления сайтом. Если вы не будете осторожны, вы можете сделать сайт бесполезным.

Запись в файл элемента управления сайтом

  1. Настройте подключение к поставщику SMS. Дополнительные сведения см. в статье Основы поставщика SMS.

  2. Создайте набор значений SWbemNameValue для хранения данных контекста.

  3. Получение дескриптора сеанса из SMS_SiteControlFile класса GetSessionHandle.

  4. Добавьте дескриптор сеанса в данные контекста.

  5. Вызовите объект RefreshSCF , SMS_SiteControlFile чтобы получить последнюю копию файла элемента управления сайтом. Используйте данные контекста в вызове.

  6. Запросите ресурс файла элемента управления сайтом, который требуется обновить, с помощью данных контекста.

  7. Обновите ресурс с помощью данных контекста.

  8. Зафиксируйте изменения в файле элемента управления сайтом SMS_SiteControlFile с помощью метода object CommitSCF .

  9. Вызовите метод объектаReleaseSessionHandle, SMS_SiteControlFile чтобы освободить дескриптор сеанса.

Пример

В следующем примере VBScript можно получить доступ к компоненту агента клиента файла элемента управления сайтом и создать фиктивное свойство, список свойств и многострочный список. Затем он удаляет внесенные обновления. В примере показано, как настроить дескриптор сеанса, получить файл элемента управления сайтом, запросить файл элемента управления сайтом, выполнить обновления и зафиксировать изменения в файле элемента управления сайтом.

В примере LocaleID свойство жестко закодировано на английский (США). Если вам нужен языковой стандарт для не сша установок, его можно получить из свойства класса LocaleIDWMI сервера SMS_Identification.

Сведения о вызове примера кода см. в разделе Вызов фрагментов кода Configuration Manager.

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  

Метод примера имеет следующие параметры:

Параметр Тип Описание
connection - SWbemServices Допустимое подключение к поставщику SMS.
siteCode - String Код сайта для Configuration Manager сайта.

Компиляция программы

Для этого примера на C# требуется следующее:

Пространства имен

System;

System.Collections.Generic;

System.Collections

System.Text

Майкрософт. ConfigurationManagement.ManagementProvider

Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Надежное программирование

Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.

Безопасность .NET Framework

Дополнительные сведения о защите приложений Configuration Manager см. в статье Configuration Manager администрирование на основе ролей.

См. также

Инструментарий управления Windows (WMI)
Сведения о файле элемента управления сайтом Configuration Manager
Чтение внедренного списка свойств файла элемента управления сайтом Configuration Manager