Jak odczytać i zapisać w pliku sterowania lokacji Configuration Manager przy użyciu usługi WMI

W Configuration Manager należy napisać plik sterowania lokacji przy użyciu Instrumentacja zarządzania Windows (WMI) przy użyciu SMS_SiteControlFile metod klasy.

Podczas zapisywania do pliku sterowania lokacji za pomocą usługi WMI, należy użyć dojścia sesji do identyfikowania aplikacji. Służy do zarządzania jednoczesnymi aktualizacjami do pliku.

Po zakończeniu zapisywania do pliku kontrolnego lokacji należy zatwierdzić zmiany.

SMS_SiteControlFile ma następujące metody zarządzania zmianami w pliku kontrolnym lokacji.

Metoda Opis
CommitSCF Stosuje zmiany do bazy danych Configuration Manager.
RefreshSCF Odświeża kopię w pamięci pliku kontrolnego lokacji przy użyciu wszelkich ostatnich zmian z bazy danych Configuration Manager.
GetSessionHandle Pobiera kopię w pamięci pliku sterowania lokacji i dojście sesji. Dojście sesji należy umieścić w IWbemContext obiekcie, który jest przesyłany do wszystkich IWbemServices metod.
ReleaseSessionHandle Zwalnia kopię pliku kontrolnego lokacji i wszystkie zasoby skojarzone z dojściem do sesji.

Przestroga

Przed użyciem klas dostawcy programu SMS w celu zmodyfikowania konfiguracji lokacji należy mieć doświadczenie w zarządzaniu konfiguracją lokacji. W celu uzyskania dużej szkody dla lokacji można zmienić konfigurowalne elementy. Należy zachować wyjątkową ostrożność lub unikać używania SMS_SCI_FileDefinition SMS_SCI_SiteDefinition klas i. Te klasy zarządzają samym plikiem kontroli lokacji. Jeśli nie jest to dokładne, możesz renderować lokację jako bezużyteczną.

Aby zapisać w pliku kontrolnym lokacji

  1. Skonfiguruj połączenie z dostawcą programu SMS. Aby uzyskać więcej informacji, zobacz temat podstawowe informacje o dostawcy programu SMS.

  2. Utwórz SWbemNameValue wartość ustawioną do przechowywania danych kontekstowych.

  3. Pobierz uchwyt sesji z SMS_SiteControlFile klasy GetSessionHandle .

  4. Dodaj dojście sesji do danych kontekstowych.

  5. Wywołaj SMS_SiteControlFile obiekt, RefreshSCF Aby uzyskać najnowszą kopię pliku kontrolnego lokacji. Użyj danych kontekstu w wywołaniu.

  6. Zapytanie dotyczące zasobu pliku sterowania lokacji, który ma zostać zaktualizowany przy użyciu danych kontekstowych.

  7. Zaktualizuj zasób przy użyciu danych kontekstowych.

  8. Zatwierdź zmiany w pliku sterowania lokacji przy użyciu SMS_SiteControlFile metody Object CommitSCF .

  9. Wywołaj SMS_SiteControlFile metodę Object, ReleaseSessionHandle Aby zwolnić uchwyt sesji.

Przykład

Poniższy przykład języka VBScript uzyskuje dostęp do składnika agenta klienta pliku kontrolnego lokacji i tworzy właściwość fikcyjną, listę właściwości i listę wielociągową. Następnie usuwa aktualizacje, które zostały wprowadzone. W przykładzie pokazano, jak skonfigurować dojście sesji, pobrać plik sterowania lokacji, wysłać zapytanie do pliku kontrolnego lokacji, wprowadzić aktualizacje i zatwierdzić zmiany w pliku kontrolnym lokacji.

W przykładzie LocaleID Właściwość jest zakodowana w języku angielskim (USA). Jeśli potrzebujesz ustawień regionalnych dla innych niż U. S. Instalacje można pobrać z właściwości klasy WMI serwera SMS_Identification LocaleID .

Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz wywoływanie Configuration Manager fragmentów kodu.

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  

Przykładowa Metoda ma następujące parametry:

Parametr Typ Opis
connection - SWbemServices Prawidłowe połączenie z dostawcą programu SMS.
siteCode - String Kod lokacji dla witryny Configuration Manager.

Kompilowanie kodu

Ten przykład w języku C# wymaga:

Przestrzenie nazw

System

System.Collections.Generic

System. Collections

System.Text

Microsoft.ConfigurationManagement. ManagementProvider

Microsoft.ConfigurationManagement. ManagementProvider. WqlQueryEngine

Zestaw

microsoft.configurationmanagement. managementprovider

adminui. wqlqueryengine

Niezawodne programowanie

Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.

Zabezpieczenia.NET Framework

Aby uzyskać więcej informacji na temat zabezpieczania aplikacji Configuration Manager, zobacz Configuration Manager Administracja oparta na rolach.

Zobacz też

Instrumentacja zarządzania Windows
Informacje o Configuration Manager pliku sterowania lokacji
Jak odczytać Configuration Manager osadzoną listę właściwości pliku sterowania lokacji