Lesen und Schreiben in die Configuration Manager Site Control-Datei mithilfe von WMI
In Configuration Manager schreiben Sie mithilfe der Windows-Verwaltungsinstrumentation (WMI) mithilfe der Klassenmethoden in die SMS_SiteControlFile
Standortsteuerungsdatei.
Beim Schreiben in die Standortsteuerungsdatei mithilfe von WMI verwenden Sie ein Sitzungshandle, um Ihre Anwendung zu identifizieren. Dies wird verwendet, um gleichzeitige Aktualisierungen der Datei zu verwalten.
Wenn Sie mit dem Schreiben in die Websitesteuerungsdatei fertig sind, müssen Sie die Änderungen committen.
SMS_SiteControlFile verfügt über die folgenden Methoden, um Änderungen an der Websitesteuerungsdatei zu verwalten.
Methode | Beschreibung |
---|---|
CommitSCF |
Wendet Ihre Änderungen auf die Configuration Manager-Datenbank an. |
RefreshSCF |
Aktualisiert Ihre speicherinterne Kopie der Standortsteuerungsdatei mit allen aktuellen Änderungen aus der Configuration Manager-Datenbank. |
GetSessionHandle |
Ruft Ihre Speicherkopie der Standortsteuerungsdatei und eines Sitzungshandles ab. Sie platzieren das Sitzungshandle in einem IWbemContext Objekt, das an alle IWbemServices Methoden übergeben wird. |
ReleaseSessionHandle |
Gibt Ihre In-Memory-Kopie der Websitesteuerungsdatei und alle Ressourcen frei, die Ihrem Sitzungshandle zugeordnet sind. |
Achtung
Sie sollten erfahrungserfahren mit der Verwaltung der Konfiguration eines Standorts sein, bevor Sie die SMS-Anbieterklassen verwenden, um die Standortkonfiguration zu ändern. Sie können einer Website großen Schaden zufügen, indem Sie einige konfigurierbare Elemente ändern. Sie sollten äußerste Vorsicht walten lassen oder die SMS_SCI_FileDefinition
Klassen und SMS_SCI_SiteDefinition
ganz vermeiden. Diese Klassen verwalten die Websitesteuerungsdatei selbst. Wenn Sie nicht vorsichtig sind, können Sie die Website unbrauchbar machen.
So schreiben Sie in die Websitesteuerungsdatei
Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.
Erstellen Sie einen
SWbemNameValue
Wertsatz, der Ihre Kontextdaten enthält.Rufen Sie ein Sitzungshandle aus der Klasse
GetSessionHandle
abSMS_SiteControlFile
.Fügen Sie den Kontextdaten das Sitzungshandle hinzu.
Rufen Sie das
SMS_SiteControlFile
-ObjektRefreshSCF
auf, um die neueste Kopie der Websitesteuerungsdatei abzurufen. Verwenden Sie die Kontextdaten im Aufruf.Fragen Sie die Websitesteuerungsdateiressource ab, die Sie mithilfe Ihrer Kontextdaten aktualisieren möchten.
Aktualisieren Sie die Ressource mithilfe Ihrer Kontextdaten.
Committen Sie Ihre Änderungen an der Websitesteuerungsdatei mithilfe der
SMS_SiteControlFile
ObjektmethodeCommitSCF
.Rufen Sie die
SMS_SiteControlFile
-ObjektmethodeReleaseSessionHandle
auf, um Das Sitzungshandle freizugeben.
Beispiel
Im folgenden VBScript-Beispiel wird auf die Client-Agent-Komponente der Standortsteuerungsdatei zugegriffen und eine Dummyeigenschaft, eine Eigenschaftenliste und eine Liste mit mehreren Zeichenfolgen erstellt. Anschließend werden die vorgenommenen Updates entfernt. Das Beispiel zeigt, wie Sie das Sitzungshandle einrichten, die Websitesteuerungsdatei abrufen, die Websitesteuerungsdatei abfragen, Aktualisierungen vornehmen und Änderungen an der Websitesteuerungsdatei committen.
Im Beispiel ist die LocaleID
Eigenschaft in Englisch (USA) hartcodiert. Wenn Sie das Gebietsschema für Nicht-USA benötigen -Installationen können Sie sie über die Eigenschaft SMS_Identification Server-WMI-KlasseLocaleID
abrufen.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager Codeausschnitten.
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
Die Beispielmethode verfügt über die folgenden Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
connection |
- Swbemservices | Eine gültige Verbindung mit dem SMS-Anbieter. |
siteCode |
- String |
Der Standortcode für die Configuration Manager Website. |
Kompilieren des Codes
Für dieses C#-Beispiel ist Folgendes erforderlich:
Namespaces
System
System.Collections.Generic
System.Collections
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Robuste Programmierung
Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager Fehlern.
.NET Framework-Sicherheit
Weitere Informationen zum Schützen Configuration Manager Anwendungen finden Sie unter Configuration Manager rollenbasierte Verwaltung.
Siehe auch
Windows Windows-Verwaltungsinstrumentation
Informationen zur Configuration Manager-Websitesteuerungsdatei
Lesen einer Configuration Manager Eingebetteten Eigenschaftenliste für Die Websitesteuerungsdatei