Läsa och skriva till Configuration Manager-platskontrollfilen med hjälp av WMI
I Configuration Manager skriver du till platskontrollfilen med hjälp av WMI (Windows Management Instrumentation) med hjälp av klassmetoderna SMS_SiteControlFile
.
När du skriver till platskontrollfilen med hjälp av WMI använder du ett sessionshandtag för att identifiera ditt program. Detta används för att hantera samtidiga uppdateringar av filen.
När du är klar med att skriva till platskontrollfilen måste du checka in ändringarna.
SMS_SiteControlFile har följande metoder för att hantera ändringar i platskontrollfilen.
Metod | Beskrivning |
---|---|
CommitSCF |
Tillämpar ändringarna på Configuration Manager-databasen. |
RefreshSCF |
Uppdaterar den minnesinterna kopian av platskontrollfilen med de senaste ändringarna från Configuration Manager-databasen. |
GetSessionHandle |
Hämtar din minnesintern kopia av platskontrollfilen och ett sessionshandtag. Du placerar sessionshandtaget i ett IWbemContext objekt som skickas till alla IWbemServices metoder. |
ReleaseSessionHandle |
Släpper din minnesintern kopia av platskontrollfilen och alla resurser som är associerade med sessionshandtaget. |
Försiktighet
Du bör ha erfarenhet av att hantera en platskonfiguration innan du använder SMS-providerklasserna för att ändra platskonfigurationen. Du kan orsaka stor skada på en webbplats genom att ändra vissa konfigurerbara objekt. Du bör vara mycket försiktig eller undvika att använda klasserna SMS_SCI_FileDefinition
och SMS_SCI_SiteDefinition
helt och hållet. De här klasserna hanterar själva platskontrollfilen. Om du inte är försiktig kan du göra webbplatsen värdelös.
Skriva till platskontrollfilen
Konfigurera en anslutning till SMS-providern. Mer information finns i grunderna för SMS-provider.
Skapa ett
SWbemNameValue
värde som ska innehålla dina kontextdata.Hämta en sessionsreferens från
SMS_SiteControlFile
klassenGetSessionHandle
.Lägg till sessionshandtaget i dina kontextdata.
Anropa objektet
SMS_SiteControlFile
RefreshSCF
för att hämta den senaste kopian av platskontrollfilen. Använd kontextdata i anropet.Fråga efter den platskontrollfilresurs som du vill uppdatera med hjälp av dina kontextdata.
Uppdatera resursen med hjälp av dina kontextdata.
Checka in ändringarna i platskontrollfilen med hjälp av
SMS_SiteControlFile
objektmetodenCommitSCF
.SMS_SiteControlFile
Anropa objektmetodenReleaseSessionHandle
för att frigöra sessionshandtaget.
Exempel
I följande VBScript-exempel får du åtkomst till klientagentkomponenten i platskontrollfilen och skapar en dummy-egenskap, egenskapslista och lista med flera strängar. Sedan tar den bort de uppdateringar som har gjorts. Exemplet visar hur du konfigurerar sessionshandtaget, hämtar platskontrollfilen, frågar platskontrollfilen, gör uppdateringar och genomför ändringar i platskontrollfilen.
I exemplet är egenskapen LocaleID
hårdkodad till engelska (USA). Om du behöver nationella inställningar för icke-USA installationer kan du hämta den från egenskapen SMS_Identification Server WMI ClassLocaleID
.
Information om hur du anropar exempelkoden finns i Anropa Configuration Manager-kodfragment.
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
Exempelmetoden har följande parametrar:
Parameter | Typ | Beskrivning |
---|---|---|
connection |
- SWbemServices | En giltig anslutning till SMS-providern. |
siteCode |
- String |
Platskoden för Configuration Manager-platsen. |
Kompilera koden
Det här C#-exemplet kräver:
Namnområden
System
System.Collections.Generic
System.Collections
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Församling
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Robust programmering
Mer information om felhantering finns i Om Configuration Manager-fel.
.NET Framework Security
Mer information om hur du skyddar Configuration Manager-program finns i Rollbaserad administration i Configuration Manager.
Se även
Windows Management Instrumentation
Om Configuration Manager-platskontrollfilen
Läsa en egenskapslista för Configuration Manager Site Control File Embedded