Guide pratique pour lire et écrire dans le fichier de contrôle de site Configuration Manager à l’aide de WMI
Dans Configuration Manager, vous écrivez dans le fichier de contrôle de site à l’aide de WMI (Windows Management Instrumentation) à l’aide des méthodes de classe SMS_SiteControlFile
.
Lorsque vous écrivez dans le fichier de contrôle de site à l’aide de WMI, vous utilisez un handle de session pour identifier votre application. Il est utilisé pour gérer les mises à jour simultanées du fichier.
Une fois que vous avez terminé d’écrire dans le fichier de contrôle de site, vous devez valider vos modifications.
SMS_SiteControlFile dispose des méthodes suivantes pour gérer les modifications apportées au fichier de contrôle de site.
Méthode | Description |
---|---|
CommitSCF |
Applique vos modifications à la base de données Configuration Manager. |
RefreshSCF |
Actualise votre copie en mémoire du fichier de contrôle de site avec les modifications récentes apportées à la base de données Configuration Manager. |
GetSessionHandle |
Obtient votre copie en mémoire du fichier de contrôle de site et d’un handle de session. Vous placez le handle de session dans un IWbemContext objet qui est passé à toutes les IWbemServices méthodes. |
ReleaseSessionHandle |
Libère votre copie en mémoire du fichier de contrôle de site et de toutes les ressources associées à votre handle de session. |
Attention
Vous devez avoir de l’expérience dans la gestion de la configuration d’un site avant d’utiliser les classes du fournisseur SMS pour modifier la configuration du site. Vous pouvez causer des dommages importants à un site en modifiant certains éléments configurables. Vous devez faire preuve d’une extrême prudence ou éviter d’utiliser complètement les SMS_SCI_FileDefinition
classes et SMS_SCI_SiteDefinition
. Ces classes gèrent le fichier de contrôle de site lui-même. Si vous ne faites pas attention, vous pouvez rendre le site inutile.
Pour écrire dans le fichier de contrôle de site
Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez Notions de base du fournisseur SMS.
Créez une
SWbemNameValue
valeur définie pour contenir vos données de contexte.Obtenez un handle de session à partir de la
SMS_SiteControlFile
classeGetSessionHandle
.Ajoutez le handle de session à vos données de contexte.
Appelez l’objet
SMS_SiteControlFile
RefreshSCF
pour obtenir la dernière copie du fichier de contrôle de site. Utilisez les données de contexte dans l’appel.Interrogez la ressource de fichier de contrôle de site que vous souhaitez mettre à jour à l’aide de vos données de contexte.
Mettez à jour la ressource à l’aide de vos données de contexte.
Validez vos modifications dans le fichier de contrôle de site à l’aide de la
SMS_SiteControlFile
méthode objectCommitSCF
.Appelez la méthode d’objet
SMS_SiteControlFile
ReleaseSessionHandle
pour libérer votre handle de session.
Exemple
L’exemple VBScript suivant accède au composant agent client du fichier de contrôle de site et crée une propriété factice, une liste de propriétés et une liste à chaînes multiples. Il supprime ensuite les mises à jour qui ont été effectuées. L’exemple montre comment configurer le handle de session, obtenir le fichier de contrôle de site, interroger le fichier de contrôle de site, effectuer des mises à jour et valider les modifications apportées au fichier de contrôle de site.
Dans l’exemple, la LocaleID
propriété est codée en dur en anglais (États-Unis). Si vous avez besoin des paramètres régionaux pour les non-États-Unis vous pouvez l’obtenir à partir de la propriété classe LocaleID
WMI du serveur SMS_Identification.
Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code 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
L’exemple de méthode a les paramètres suivants :
Paramètre | Type | Description |
---|---|---|
connection |
- SWbemServices | Connexion valide au fournisseur SMS. |
siteCode |
- String |
Code de site pour le site Configuration Manager. |
Compilation du code
Cet exemple C# nécessite :
Espaces de noms
Système
System.Collections.Generic
System.Collections
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Programmation robuste
Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.
Sécurité de .NET Framework
Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager’administration basée sur les rôles.
Voir aussi
Windows Infrastructure de gestion
À propos du fichier de contrôle de site Configuration Manager
Guide pratique pour lire une liste de propriétés incorporées d’un fichier de contrôle de site Configuration Manager