Sdílet prostřednictvím


Čtení a zápis do řídicího souboru lokality nástroje Configuration Manager pomocí rozhraní WMI

V nástroji Configuration Manager zapisujete do řídicího souboru lokality pomocí rozhraní WMI (Windows Management Instrumentation) pomocí SMS_SiteControlFile metod třídy.

Při zápisu do řídicího souboru webu pomocí rozhraní WMI se k identifikaci aplikace používá popisovač relace. Slouží ke správě souběžných aktualizací souboru.

Po dokončení zápisu do řídicího souboru webu musíte změny potvrdit.

SMS_SiteControlFile má následující metody pro správu změn v souboru ovládacího prvku lokality.

Metoda Popis
CommitSCF Použije provedené změny na databázi nástroje Configuration Manager.
RefreshSCF Aktualizuje kopii řídicího souboru lokality v paměti všemi nedávnými změnami z databáze nástroje Configuration Manager.
GetSessionHandle Získá kopii řídicího souboru lokality v paměti a popisovač relace. Popisovač relace umístíte do objektu IWbemContext , který je předán všem IWbemServices metodám.
ReleaseSessionHandle Uvolní kopii řídicího souboru lokality v paměti a všechny prostředky přidružené k popisovači relace.

Upozornění

Před použitím tříd poskytovatele serveru SMS ke změně konfigurace lokality byste měli mít zkušenosti se správou konfigurace lokality. Změnou některých konfigurovatelných položek můžete webu způsobit velkou škodu. Měli byste postupovat velmi opatrně nebo se zcela vyhnout používání SMS_SCI_FileDefinition tříd a SMS_SCI_SiteDefinition . Tyto třídy spravují samotný řídicí soubor webu. Pokud nejste opatrní, můžete web zneužit.

Zápis do řídicího souboru webu

  1. Nastavte připojení k poskytovateli serveru SMS. Další informace najdete v tématu Základy poskytovatele serveru SMS.

  2. Vytvořte SWbemNameValue sadu hodnot, která bude obsahovat kontextová data.

  3. Získejte popisovač relace z SMS_SiteControlFile třídy GetSessionHandle.

  4. Přidejte popisovač relace do kontextových dat.

  5. Voláním objektu SMS_SiteControlFileRefreshSCF získáte nejnovější kopii ovládacího souboru webu. Použijte kontextová data ve volání.

  6. Pomocí kontextových dat zadejte dotaz na prostředek souboru ovládacího prvku webu, který chcete aktualizovat.

  7. Aktualizujte prostředek pomocí kontextových dat.

  8. Potvrďte změny v řídicím souboru webu pomocí metody objektu SMS_SiteControlFileCommitSCF .

  9. Voláním objektové SMS_SiteControlFileReleaseSessionHandle metody uvolněte popisovač relace.

Příklad

Následující příklad jazyka VBScript přistupuje ke komponentě klientského agenta řídicího souboru lokality a vytvoří fiktivní vlastnost, seznam vlastností a seznam více řetězců. Potom odebere provedené aktualizace. Příklad ukazuje, jak nastavit popisovač relace, získat řídicí soubor webu, dotazovat se na řídicí soubor webu, provést aktualizace a potvrdit změny v řídicím souboru webu.

V tomto příkladu LocaleID je vlastnost pevně zakódovaná na angličtinu (USA). Pokud potřebujete národní prostředí pro jiné uživatele než USA můžete ho získat z vlastnosti SMS_Identification serverová třídaLocaleID služby WMI.

Informace o volání ukázkového kódu najdete v tématu Volání fragmentů kódu nástroje 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  

Ukázková metoda má následující parametry:

Parametr Typ Popis
connection - SWbemServices Platné připojení k poskytovateli serveru SMS.
siteCode - String Kód lokality pro lokalitu nástroje Configuration Manager.

Kompilace kódu

Tento příklad jazyka C# vyžaduje:

Obory názvů

Systém

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Shromáždění

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robustní programování

Další informace o zpracování chyb najdete v tématu Informace o chybách nástroje Configuration Manager.

Zabezpečení rozhraní .NET Framework

Další informace o zabezpečení aplikací Nástroje Configuration Manager najdete v tématu Správa na základě rolí nástroje Configuration Manager.

Viz taky

Instrumentace správy systému Windows
O řídicím souboru lokality nástroje Configuration Manager
Čtení seznamu vložených vlastností souboru ovládacího prvku lokality nástroje Configuration Manager