Lezen en schrijven naar het Configuration Manager-sitebeheerbestand met behulp van WMI
In Configuration Manager schrijft u naar het sitebeheerbestand met behulp van Windows Management Instrumentation (WMI) met behulp van de SMS_SiteControlFile
klassemethoden.
Wanneer u met behulp van WMI naar het sitebeheerbestand schrijft, gebruikt u een sessie-ingang om uw toepassing te identificeren. Dit wordt gebruikt om gelijktijdige updates van het bestand te beheren.
Wanneer u klaar bent met het schrijven naar het sitebeheerbestand, moet u uw wijzigingen doorvoeren.
SMS_SiteControlFile heeft de volgende methoden om wijzigingen in het sitebeheerbestand te beheren.
Methode | Beschrijving |
---|---|
CommitSCF |
Past uw wijzigingen toe op de Configuration Manager-database. |
RefreshSCF |
Hiermee vernieuwt u uw in-memory kopie van het sitebeheerbestand met recente wijzigingen in de Configuration Manager-database. |
GetSessionHandle |
Hiermee haalt u uw in-memory kopie van het sitebeheerbestand en een sessie-ingang op. U plaatst de sessie-ingang in een IWbemContext object dat wordt doorgegeven aan alle IWbemServices methoden. |
ReleaseSessionHandle |
Geeft uw in-memory kopie van het sitebeheerbestand en eventuele resources die zijn gekoppeld aan uw sessie-ingang vrij. |
Voorzichtigheid
U moet ervaring hebben met het beheren van de configuratie van een site voordat u de sms-providerklassen gebruikt om de siteconfiguratie te wijzigen. U kunt een site grote schade toebrengen door enkele configureerbare items te wijzigen. U moet uiterst voorzichtig zijn of de SMS_SCI_FileDefinition
klassen en SMS_SCI_SiteDefinition
helemaal niet gebruiken. Met deze klassen wordt het sitebeheerbestand zelf beheerd. Als u niet voorzichtig bent, kunt u de site nutteloos maken.
Schrijven naar het sitebeheerbestand
Een verbinding met de SMS-provider instellen. Zie Basisprincipes van SMS-provider voor meer informatie.
Maak een
SWbemNameValue
waardeset voor het opslaan van uw contextgegevens.Haal een sessie-ingang op uit de
SMS_SiteControlFile
klasseGetSessionHandle
.Voeg de sessie-ingang toe aan uw contextgegevens.
Roep het
SMS_SiteControlFile
objectRefreshSCF
aan om de meest recente kopie van het sitebeheerbestand op te halen. Gebruik de contextgegevens in de aanroep.Voer een query uit voor de sitebeheerbestandsresource die u wilt bijwerken met behulp van uw contextgegevens.
Werk de resource bij met behulp van uw contextgegevens.
Voer uw wijzigingen door in het sitebeheerbestand met behulp van de
SMS_SiteControlFile
objectmethodeCommitSCF
.Roep de
SMS_SiteControlFile
objectmethodeReleaseSessionHandle
aan om de sessie-ingang vrij te geven.
Voorbeeld
Het volgende VBScript-voorbeeld heeft toegang tot het clientagentonderdeel van het sitebeheerbestand en maakt een dummy-eigenschap, eigenschappenlijst en lijst met meerdere tekenreeksen. Vervolgens worden de aangebrachte updates verwijderd. In het voorbeeld ziet u hoe u de sessie-ingang instelt, het sitebeheerbestand opvraagt, het sitebeheerbestand opvraagt, updates aanbrengt en wijzigingen doorvoert in het sitebeheerbestand.
In het voorbeeld is de LocaleID
eigenschap vastgelegd in het Engels (VS). Als u de landinstelling nodig hebt voor niet-Amerikaanse installaties kunt u deze ophalen via de WMI-klasse-eigenschapLocaleID
SMS_Identification-server.
Zie Configuration Manager-codefragmenten aanroepen voor meer informatie over het aanroepen van de voorbeeldcode.
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
De voorbeeldmethode heeft de volgende parameters:
Parameter | Type | Beschrijving |
---|---|---|
connection |
- SWbemServices | Een geldige verbinding met de SMS-provider. |
siteCode |
- String |
De sitecode voor de Configuration Manager-site. |
De code compileren
Voor dit C#-voorbeeld is het volgende vereist:
Naamruimten
Systeem
System.Collections.Generic
System.Collections
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Vergadering
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Robuust programmeren
Zie Over Configuration Manager-fouten voor meer informatie over foutafhandeling.
.NET Framework-beveiliging
Zie Op rollen gebaseerd beheer van Configuration Manager voor meer informatie over het beveiligen van Configuration Manager-toepassingen.
Zie ook
Windows Management Instrumentation
Over het Configuration Manager-sitebeheerbestand
Een ingesloten eigenschappenlijst met ingesloten eigenschappen van een Configuration Manager-sitebeheerbestand lezen