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 voor het beheren van gelijktijdige updates van het bestand.
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 van
SMS_SiteControlFile
de 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 Aanroepen Configuration Manager codefragmenten 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 Configuration Manager op rollen gebaseerd beheer voor meer informatie over het beveiligen van Configuration Manager toepassingen.
Zie ook
Windows Management Instrumentation
Over het Configuration Manager sitebeheerbestand
Een lijst met ingesloten eigenschappen van Configuration Manager sitebeheerbestand lezen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor