Freigeben über


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

  1. Richten Sie eine Verbindung mit dem SMS-Anbieter ein. Weitere Informationen finden Sie unter Grundlagen des SMS-Anbieters.

  2. Erstellen Sie einen SWbemNameValue Wertsatz, der Ihre Kontextdaten enthält.

  3. Rufen Sie ein Sitzungshandle aus der Klasse GetSessionHandleabSMS_SiteControlFile.

  4. Fügen Sie den Kontextdaten das Sitzungshandle hinzu.

  5. Rufen Sie das SMS_SiteControlFile -Objekt RefreshSCF auf, um die neueste Kopie der Websitesteuerungsdatei abzurufen. Verwenden Sie die Kontextdaten im Aufruf.

  6. Fragen Sie die Websitesteuerungsdateiressource ab, die Sie mithilfe Ihrer Kontextdaten aktualisieren möchten.

  7. Aktualisieren Sie die Ressource mithilfe Ihrer Kontextdaten.

  8. Committen Sie Ihre Änderungen an der Websitesteuerungsdatei mithilfe der SMS_SiteControlFile Objektmethode CommitSCF .

  9. Rufen Sie die SMS_SiteControlFile -Objektmethode ReleaseSessionHandle 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