Чтение и запись в файл элемента управления сайтом 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
в целом. Эти классы управляют самим файлом элемента управления сайтом. Если вы не будете осторожны, вы можете сделать сайт бесполезным.
Запись в файл элемента управления сайтом
Настройте подключение к поставщику SMS. Дополнительные сведения см. в статье Основы поставщика SMS.
Создайте набор значений
SWbemNameValue
для хранения данных контекста.Получение дескриптора сеанса из
SMS_SiteControlFile
классаGetSessionHandle
.Добавьте дескриптор сеанса в данные контекста.
Вызовите объект
RefreshSCF
,SMS_SiteControlFile
чтобы получить последнюю копию файла элемента управления сайтом. Используйте данные контекста в вызове.Запросите ресурс файла элемента управления сайтом, который требуется обновить, с помощью данных контекста.
Обновите ресурс с помощью данных контекста.
Зафиксируйте изменения в файле элемента управления сайтом
SMS_SiteControlFile
с помощью метода objectCommitSCF
.Вызовите метод объекта
ReleaseSessionHandle
,SMS_SiteControlFile
чтобы освободить дескриптор сеанса.
Пример
В следующем примере VBScript можно получить доступ к компоненту агента клиента файла элемента управления сайтом и создать фиктивное свойство, список свойств и многострочный список. Затем он удаляет внесенные обновления. В примере показано, как настроить дескриптор сеанса, получить файл элемента управления сайтом, запросить файл элемента управления сайтом, выполнить обновления и зафиксировать изменения в файле элемента управления сайтом.
В примере LocaleID
свойство жестко закодировано на английский (США). Если вам нужен языковой стандарт для не сша установок, его можно получить из свойства класса LocaleID
WMI сервера 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