Come leggere e scrivere nel file di controllo del sito di Configuration Manager usando WMI
In Configuration Manager si scrive nel file di controllo del sito usando Strumentazione gestione Windows (WMI) usando i metodi della SMS_SiteControlFile
classe .
Quando si scrive nel file di controllo del sito usando WMI, si usa un handle di sessione per identificare l'applicazione. Viene usato per gestire gli aggiornamenti simultanei del file.
Al termine della scrittura nel file di controllo del sito, è necessario eseguire il commit delle modifiche.
SMS_SiteControlFile dispone dei metodi seguenti per gestire le modifiche al file di controllo del sito.
Metodo | Descrizione |
---|---|
CommitSCF |
Applica le modifiche apportate al database di Configuration Manager. |
RefreshSCF |
Aggiorna la copia in memoria del file di controllo del sito con eventuali modifiche recenti apportate dal database di Configuration Manager. |
GetSessionHandle |
Ottiene la copia in memoria del file di controllo del sito e un handle di sessione. L'handle di sessione viene inserito in un IWbemContext oggetto passato a tutti i IWbemServices metodi. |
ReleaseSessionHandle |
Rilascia la copia in memoria del file di controllo del sito e tutte le risorse associate all'handle di sessione. |
Attenzione
È consigliabile avere esperienza nella gestione della configurazione di un sito prima di usare le classi del provider SMS per modificare la configurazione del sito. È possibile causare gravi danni a un sito modificando alcuni elementi configurabili. È consigliabile usare estrema cautela o evitare di usare completamente le SMS_SCI_FileDefinition
classi e SMS_SCI_SiteDefinition
. Queste classi gestiscono il file di controllo del sito stesso. Se non si è attenti, è possibile rendere il sito inutile.
Per scrivere nel file di controllo del sito
Configurare una connessione al provider SMS. Per altre informazioni, vedere Nozioni fondamentali sul provider SMS.
Creare un
SWbemNameValue
valore impostato per contenere i dati di contesto.Ottenere un handle di sessione dalla
SMS_SiteControlFile
classeGetSessionHandle
.Aggiungere l'handle di sessione ai dati di contesto.
Chiamare l'oggetto
SMS_SiteControlFile
RefreshSCF
per ottenere la copia più recente del file di controllo del sito. Usare i dati di contesto nella chiamata.Eseguire una query per la risorsa file di controllo del sito da aggiornare usando i dati di contesto.
Aggiornare la risorsa usando i dati di contesto.
Eseguire il commit delle modifiche apportate al file di controllo del sito usando il metodo dell'oggetto
SMS_SiteControlFile
CommitSCF
.Chiamare il metodo dell'oggetto
SMS_SiteControlFile
ReleaseSessionHandle
per rilasciare l'handle di sessione.
Esempio
L'esempio VBScript seguente accede al componente agente client del file di controllo del sito e crea una proprietà fittizia, un elenco di proprietà e un elenco di più stringhe. Rimuove quindi gli aggiornamenti eseguiti. L'esempio illustra come configurare l'handle di sessione, ottenere il file di controllo del sito, eseguire query sul file di controllo del sito, apportare aggiornamenti e eseguire il commit delle modifiche al file di controllo del sito.
Nell'esempio la LocaleID
proprietà è hardcoded in inglese (Stati Uniti). Se sono necessarie le impostazioni locali per gli stati non statunitensi installazioni, è possibile ottenerlo dalla proprietà SMS_Identification Server WMI ClassLocaleID
.
Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice di 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
Il metodo di esempio include i parametri seguenti:
Parametro | Tipo | Descrizione |
---|---|---|
connection |
- SWbemServices | Connessione valida al provider SMS. |
siteCode |
- String |
Codice del sito per il sito di Configuration Manager. |
Compilazione del codice
Questo esempio C# richiede:
Spazi dei nomi
Sistema
System.Collections.Generic
System.Collections
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Programmazione efficiente
Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.
Sicurezza di .NET Framework
Per altre informazioni sulla protezione delle applicazioni di Configuration Manager, vedere Amministrazione basata sui ruoli di Configuration Manager.
Vedere anche
Strumentazione gestione Windows
Informazioni sul file di controllo del sito di Configuration Manager
Come leggere un elenco di proprietà incorporate del file di controllo del sito di Configuration Manager