Udostępnij za pośrednictwem


Jak odczytywać i zapisywać w pliku kontroli lokacji programu Configuration Manager przy użyciu usługi WMI

W programie Configuration Manager zapisujesz w pliku kontroli lokacji przy użyciu instrumentacji zarządzania windows (WMI) przy użyciu SMS_SiteControlFile metod klasy.

Podczas zapisywania w pliku kontroli lokacji przy użyciu usługi WMI można użyć dojścia sesji do identyfikowania aplikacji. Służy do zarządzania równoczesne aktualizacje pliku.

Po zakończeniu zapisywania w pliku kontroli lokacji należy zatwierdzić zmiany.

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

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

Uwaga

Należy mieć doświadczenie w zarządzaniu konfiguracją lokacji przed użyciem klas dostawcy programu SMS w celu zmodyfikowania konfiguracji lokacji. Witryna może wyrządzić ogromne szkody, zmieniając niektóre konfigurowalne elementy. Należy zachować szczególną ostrożność lub całkowicie unikać używania SMS_SCI_FileDefinition klas i SMS_SCI_SiteDefinition . Te klasy zarządzają samym plikiem kontroli lokacji. Jeśli nie uważasz, możesz uczynić witrynę bezużyteczną.

Aby zapisać w pliku kontroli lokacji

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

  2. SWbemNameValue Utwórz zestaw wartości do przechowywania danych kontekstowych.

  3. Pobieranie dojścia sesji z SMS_SiteControlFile klasy GetSessionHandle.

  4. Dodaj dojście sesji do danych kontekstu.

  5. Wywołaj obiektRefreshSCF, SMS_SiteControlFile aby uzyskać najnowszą kopię pliku kontroli lokacji. Użyj danych kontekstu w wywołaniu.

  6. Zapytanie dotyczące zasobu pliku kontroli lokacji, który chcesz zaktualizować przy użyciu danych kontekstowych.

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

  8. Zatwierdź zmiany w pliku kontroli lokacji przy użyciu metody obiektu SMS_SiteControlFileCommitSCF .

  9. Wywołaj metodę obiektuReleaseSessionHandle, SMS_SiteControlFile aby zwolnić dojście sesji.

Przykład

Poniższy przykład VBScript uzyskuje dostęp do składnika agenta klienta pliku kontroli lokacji i tworzy fikcyjną właściwość, listę właściwości i listę wielu ciągów. Następnie usuwa wprowadzone aktualizacje. W przykładzie pokazano, jak skonfigurować dojście sesji, pobrać plik kontroli lokacji, wykonać zapytanie dotyczące pliku kontroli lokacji, wprowadzić aktualizacje i zatwierdzić zmiany w pliku kontroli lokacji.

W tym przykładzie właściwość LocaleID jest zapisana na stałe w języku angielskim (USA). Jeśli potrzebujesz ustawień regionalnych dla użytkowników spoza STANÓW Zjednoczonych można pobrać z właściwości klasy WMILocaleID serwera SMS_Identification.

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

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 Wpisać Opis
connection - SWbemServices Prawidłowe połączenie z dostawcą programu SMS.
siteCode - String Kod witryny programu Configuration Manager.

Kompilowanie kodu

Ten przykład języka C# wymaga:

Przestrzenie nazw

System

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Montaż

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Niezawodne programowanie

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

Zabezpieczenia programu .NET Framework

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

Zobacz też

Instrumentacja zarządzania systemem Windows
Informacje o pliku kontroli lokacji programu Configuration Manager
Jak odczytać listę właściwości osadzonych plików kontrolek lokacji programu Configuration Manager