Como ler e escrever para o ficheiro de controlo do site do gestor de configuração usando o WMI
No Gestor de Configuração, escreve para o ficheiro de controlo do site utilizando Windows Instrumentação de Gestão (WMI) utilizando os métodos de SMS_SiteControlFile
classe.
Ao escrever para o ficheiro de controlo do site utilizando o WMI, utilize uma pega de sessão para identificar a sua aplicação. Isto é usado para gerir atualizações simultâneas para o ficheiro.
Quando terminar de escrever no ficheiro de controlo do site, deve cometer as suas alterações.
SMS_SiteControlFile tem os seguintes métodos para gerir as alterações no ficheiro de controlo do site.
Método | Descrição |
---|---|
CommitSCF |
Aplica as alterações na base de dados Do Gestor de Configurações. |
RefreshSCF |
Refresca a sua cópia na memória do ficheiro de controlo do site com quaisquer alterações recentes a partir da base de dados do Gestor de Configuração. |
GetSessionHandle |
Obtém a sua cópia na memória do ficheiro de controlo do site e uma pega de sessão. Coloque o cabo da sessão num IWbemContext objeto que é passado a todos os IWbemServices métodos. |
ReleaseSessionHandle |
Liberta a sua cópia na memória do ficheiro de controlo do site e quaisquer recursos associados ao seu manípulo de sessão. |
Atenção
Deve ter experiência na gestão da configuração de um site antes de utilizar as classes SMS Provider para modificar a configuração do site. Pode causar grandes danos a um site alterando alguns itens configuráveis. Deve ter muito cuidado ou evitar a utilização total das SMS_SCI_FileDefinition
SMS_SCI_SiteDefinition
aulas. Estas classes gerem o ficheiro de controlo do site em si. Se não tiver cuidado, pode tornar o site inútil.
Para escrever para o ficheiro de controlo do site
Configurar uma ligação com o Fornecedor DE SMS. Para mais informações, consulte os fundamentos do Fornecedor de SMS.
Crie um
SWbemNameValue
conjunto de valor para conter os seus dados de contexto.Obtenha uma pega de sessão da
SMS_SiteControlFile
GetSessionHandle
aula.Adicione o cabo da sessão aos dados de contexto.
Ligue para o
SMS_SiteControlFile
objeto para obter a cópia mais recente do ficheiro de controlo doRefreshSCF
site. Use os dados de contexto na chamada.Consulta para o recurso de ficheiro de controlo do site que pretende atualizar usando os seus dados de contexto.
Atualize o recurso utilizando os seus dados de contexto.
Comprometa as alterações no ficheiro de controlo do site utilizando o método do
SMS_SiteControlFile
CommitSCF
objeto.Ligue para o método do
SMS_SiteControlFile
objeto para libertar oReleaseSessionHandle
manípulo da sessão.
Exemplo
O exemplo VBScript seguinte acede ao componente do agente cliente do ficheiro de controlo do site e cria uma lista de propriedades falsas, lista de propriedades e multi-cordas. Em seguida, remove as atualizações que foram feitas. O exemplo demonstra como configurar o manípulo da sessão, obter o ficheiro de controlo do site, consultar o ficheiro de controlo do site, fazer atualizações e comprometer alterações no ficheiro de controlo do site.
No exemplo, a LocaleID
propriedade é codificada para inglês (EUA). Se precisar do local para não-EUA. instalações, você pode obtê-lo a partir da propriedade classe WMI do SMS_Identification servidor. LocaleID
Para obter informações sobre a chamada do código de amostra, consulte o Código de Identificação do Gestor de Chamadas.
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 exemplo tem os seguintes parâmetros:
Parâmetro | Tipo | Description |
---|---|---|
connection |
- SWbemServices | Uma ligação válida ao Fornecedor de SMS. |
siteCode |
- String |
O código do site do site do Gestor de Configuração. |
A Compilar o Código
Este exemplo C# requer:
Espaços de nomes
Sistema
System.Collections.Generic
Sistema.Coleções
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assemblagem
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Programação Robusta
Para obter mais informações sobre o tratamento de erros, consulte Sobre erros do Gestor de Configuração.
Segurança do .NET Framework
Para obter mais informações sobre a segurança das aplicações do Gestor de Configuração, consulte a administração baseada em funções do Gestor de Configuração.
Consulte também
Windows Instrumentação de Gestão
Sobre o Ficheiro de Controlo do Site do Gestor de Configuração
Como ler uma lista de propriedades incorporada do ficheiro de controlo do site do gestor de configuração