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


Чтение и запись в файл элемента управления сайтом 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

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

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

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

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

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

См. также

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