Como ler e gravar no arquivo de controle de site Configuration Manager usando o WMI
Em Configuration Manager, você grava no arquivo de controle do site usando a WMI (Instrumentação de Gerenciamento do Windows) usando os métodos de SMS_SiteControlFile
classe.
Ao gravar no arquivo de controle do site usando o WMI, você usa um identificador de sessão para identificar seu aplicativo. Isso é usado para gerenciar atualizações simultâneas para o arquivo.
Quando terminar de gravar no arquivo de controle do site, você deverá confirmar suas alterações.
SMS_SiteControlFile tem os seguintes métodos para gerenciar alterações no arquivo de controle do site.
Método | Descrição |
---|---|
CommitSCF |
Aplica suas alterações ao banco de dados Configuration Manager. |
RefreshSCF |
Atualiza a cópia na memória do arquivo de controle do site com alterações recentes do banco de dados Configuration Manager. |
GetSessionHandle |
Obtém sua cópia na memória do arquivo de controle do site e um identificador de sessão. Você coloca o identificador de sessão em um IWbemContext objeto que é passado para todos os IWbemServices métodos. |
ReleaseSessionHandle |
Libera sua cópia na memória do arquivo de controle do site e todos os recursos associados ao identificador de sessão. |
Cuidado
Você deve ter experiência em gerenciar a configuração de um site antes de usar as classes do Provedor de SMS para modificar a configuração do site. Você pode causar grandes danos a um site alterando alguns itens configuráveis. Você deve usar extrema cautela ou evitar usar as SMS_SCI_FileDefinition
classes e SMS_SCI_SiteDefinition
completamente. Essas classes gerenciam o próprio arquivo de controle do site. Se você não tiver cuidado, poderá tornar o site inútil.
Para gravar no arquivo de controle do site
Configure uma conexão com o Provedor de SMS. Para obter mais informações, confira Os fundamentos do Provedor de SMS.
Crie um
SWbemNameValue
valor definido para manter seus dados de contexto.Obtenha um identificador de sessão da
SMS_SiteControlFile
classeGetSessionHandle
.Adicione o identificador de sessão aos dados de contexto.
Chame o
SMS_SiteControlFile
objetoRefreshSCF
para obter a cópia mais recente do arquivo de controle do site. Use os dados de contexto na chamada.Consulta para o recurso de arquivo de controle de site que você deseja atualizar usando seus dados de contexto.
Atualize o recurso usando seus dados de contexto.
Confirme suas alterações no arquivo de controle do site usando o método de
SMS_SiteControlFile
objetoCommitSCF
.Chame o método do
SMS_SiteControlFile
objetoReleaseSessionHandle
para liberar o identificador de sessão.
Exemplo
O exemplo VBScript a seguir acessa o componente do agente cliente do arquivo de controle do site e cria uma propriedade fictícia, uma lista de propriedades e uma lista de várias cadeias de caracteres. Em seguida, ele remove as atualizações que foram feitas. O exemplo demonstra como configurar o identificador de sessão, obter o arquivo de controle do site, consultar o arquivo de controle do site, fazer atualizações e confirmar alterações no arquivo de controle do site.
No exemplo, a LocaleID
propriedade é codificada em código para inglês (EUA). Se você precisar da localidade para não-EUA. instalações, você pode obtê-lo na propriedade classe LocaleID
WMI do servidor SMS_Identification.
Para obter informações sobre como chamar o código de exemplo, consulte Chamando Configuration Manager Snippets de Código.
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
O método de exemplo tem os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
---|---|---|
connection |
- SWbemServices | Uma conexão válida com o provedor de SMS. |
siteCode |
- String |
O código do site do site Configuration Manager. |
Compilando o código
Este exemplo de C# requer:
Namespaces
System
System.Collections.Generic
System.Collections
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Programação robusta
Para obter mais informações sobre o tratamento de erros, consulte Sobre erros de Configuration Manager.
Segurança do .NET Framework
Para obter mais informações sobre como proteger aplicativos Configuration Manager, consulte Configuration Manager administração baseada em função.
Confira também
Instrumentação de gerenciamento do Windows
Sobre o arquivo de controle de site Configuration Manager
Como ler uma lista de propriedades integradas de arquivo de controle de site Configuration Manager