Lectura y escritura en el archivo de control de sitio de Configuration Manager mediante WMI
En Configuration Manager, se escribe en el archivo de control de sitio mediante Instrumental de administración de Windows (WMI) mediante los métodos de SMS_SiteControlFile
clase.
Al escribir en el archivo de control de sitio mediante WMI, se usa un identificador de sesión para identificar la aplicación. Esto se usa para administrar actualizaciones simultáneas en el archivo.
Cuando haya terminado de escribir en el archivo de control de sitio, debe confirmar los cambios.
SMS_SiteControlFile tiene los métodos siguientes para administrar los cambios en el archivo de control de sitio.
Método | Descripción |
---|---|
CommitSCF |
Aplica los cambios a la base de datos de Configuration Manager. |
RefreshSCF |
Actualiza la copia en memoria del archivo de control de sitio con los cambios recientes de la base de datos de Configuration Manager. |
GetSessionHandle |
Obtiene la copia en memoria del archivo de control de sitio y un identificador de sesión. Coloque el identificador de sesión en un IWbemContext objeto que se pasa a todos los IWbemServices métodos. |
ReleaseSessionHandle |
Libera la copia en memoria del archivo de control de sitio y los recursos asociados al identificador de sesión. |
Precaución
Debe tener experiencia en la administración de la configuración de un sitio antes de usar las clases de proveedor de SMS para modificar la configuración del sitio. Puede causar un gran daño a un sitio cambiando algunos elementos configurables. Debe tener mucha precaución o evitar el uso total de las SMS_SCI_FileDefinition
clases y SMS_SCI_SiteDefinition
. Estas clases administran el propio archivo de control de sitio. Si no tiene cuidado, puede hacer que el sitio sea inútil.
Para escribir en el archivo de control de sitio
Configure una conexión con el proveedor de SMS. Para obtener más información, consulte Aspectos básicos del proveedor de SMS.
Cree un conjunto de
SWbemNameValue
valores para contener los datos de contexto.Obtenga un identificador de sesión de la
SMS_SiteControlFile
claseGetSessionHandle
.Agregue el identificador de sesión a los datos de contexto.
Llame al
SMS_SiteControlFile
objetoRefreshSCF
para obtener la copia más reciente del archivo de control de sitio. Use los datos de contexto en la llamada.Consulte el recurso de archivo de control de sitio que desea actualizar mediante los datos de contexto.
Actualice el recurso con los datos de contexto.
Confirme los cambios en el archivo de control de sitio mediante el método object
SMS_SiteControlFile
CommitSCF
.Llame al método de
SMS_SiteControlFile
objetoReleaseSessionHandle
para liberar el identificador de sesión.
Ejemplo
En el siguiente ejemplo de VBScript se obtiene acceso al componente del agente cliente del archivo de control de sitio y se crea una propiedad ficticia, una lista de propiedades y una lista de varias cadenas. A continuación, quita las actualizaciones que se realizaron. En el ejemplo se muestra cómo configurar el identificador de sesión, obtener el archivo de control de sitio, consultar el archivo de control de sitio, realizar actualizaciones y confirmar cambios en el archivo de control de sitio.
En el ejemplo, la LocaleID
propiedad está codificada de forma rígida en inglés (EE. UU.). Si necesita la configuración regional para los estados que no son de EE. UU. instalaciones, puede obtenerla de la propiedad SMS_Identification ClaseLocaleID
WMI de servidor.
Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de 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
El método de ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
connection |
- SWbemServices | Una conexión válida al proveedor de SMS. |
siteCode |
- String |
Código de sitio para el sitio de Configuration Manager. |
Compilar el código
Este ejemplo de C# requiere:
Espacios de nombres
System
System.Collections.Generic
System.Collections
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Ensamblado
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Programación sólida
Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.
Seguridad de .NET Framework
Para obtener más información sobre la protección de aplicaciones Configuration Manager, consulte Configuration Manager administración basada en roles.
Consulta también
Instrumental de administración de Windows
Acerca del archivo de control de sitio Configuration Manager
Cómo leer una lista de propiedades incrustadas Configuration Manager archivo de control de sitio