WMI を使用してConfiguration Manager サイト コントロール ファイルの読み取りと書き込みを行う方法

Configuration Managerでは、クラス メソッドを使用して、Windows Management Instrumentation (WMI) を使用してサイト コントロール ファイルにSMS_SiteControlFile書き込みます。

WMI を使用してサイト コントロール ファイルに書き込む場合は、セッション ハンドルを使用してアプリケーションを識別します。 これは、ファイルの同時更新を管理するために使用されます。

サイト コントロール ファイルへの書き込みが完了したら、変更をコミットする必要があります。

SMS_SiteControlFile には、サイト コントロール ファイルの変更を管理するための次の方法があります。

メソッド 説明
CommitSCF Configuration Manager データベースに変更を適用します。
RefreshSCF Configuration Manager データベースからの最近の変更で、サイト コントロール ファイルのメモリ内コピーを更新します。
GetSessionHandle サイト コントロール ファイルとセッション ハンドルのメモリ内コピーを取得します。 セッション ハンドル IWbemContext は、すべての IWbemServices メソッドに渡されるオブジェクトに配置します。
ReleaseSessionHandle サイト コントロール ファイルとセッション ハンドルに関連付けられているリソースのメモリ内コピーを解放します。

注意

SMS プロバイダー クラスを使用してサイトの構成を変更する前に、サイトの構成の管理に関する経験が必要です。 構成可能な項目を変更することで、サイトに大きな損害を与える可能性があります。 と クラスを完全に使用しないように、細心の注意をSMS_SCI_FileDefinitionSMS_SCI_SiteDefinition払う必要があります。 これらのクラスは、サイト コントロール ファイル自体を管理します。 注意しないと、サイトを役に立たないようにすることができます。

サイト コントロール ファイルに書き込むには

  1. SMS プロバイダーへの接続を設定します。 詳細については、「 SMS プロバイダーの基礎」を参照してください。

  2. コンテキスト データを SWbemNameValue 保持する値セットを作成します。

  3. クラス から SMS_SiteControlFile セッション ハンドルを取得します GetSessionHandle

  4. セッション ハンドルをコンテキスト データに追加します。

  5. オブジェクトRefreshSCFSMS_SiteControlFile呼び出して、サイト コントロール ファイルの最新のコピーを取得します。 呼び出しでコンテキスト データを使用します。

  6. コンテキスト データを使用して更新するサイト コントロール ファイル リソースのクエリを実行します。

  7. コンテキスト データを使用してリソースを更新します。

  8. オブジェクト メソッドを使用して、サイト コントロール ファイルに変更を SMS_SiteControlFile コミットします CommitSCF

  9. オブジェクト ReleaseSessionHandle メソッドをSMS_SiteControlFile呼び出して、セッション ハンドルを解放します。

次の VBScript の例では、サイト コントロール ファイルのクライアント エージェント コンポーネントにアクセスし、ダミー プロパティ、プロパティ リスト、および複数文字列リストを作成します。 その後、行われた更新プログラムが削除されます。 この例では、セッション ハンドルの設定、サイト コントロール ファイルの取得、サイト コントロール ファイルのクエリ、更新の実行、サイト コントロール ファイルへの変更のコミットを行う方法を示します。

この例では、 LocaleID プロパティは英語 (米国) にハードコーディングされています。 米国以外のロケールが必要な場合。インストールでは、 SMS_Identification サーバー WMI クラスLocaleID プロパティから取得できます。

サンプル コードの呼び出しについては、「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  

このメソッドの例には、次のパラメーターがあります。

パラメーター 説明
connection - SWbemServices SMS プロバイダーへの有効な接続。
siteCode - String Configuration Manager サイトのサイト コード。

コードのコンパイル

この C# の例では、次のものが必要です。

名前空間

System

System.Collections.Generic

System.collections

System.text

Microsoft。ConfigurationManagement.ManagementProvider

Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

堅牢なプログラミング

エラー処理の詳細については、「Configuration Manager エラーについて」を参照してください。

.NET Framework のセキュリティ

Configuration Manager アプリケーションのセキュリティ保護の詳細については、「ロールベースの管理Configuration Manager」を参照してください。

関連項目

Windows Management Instrumentation
サイトコントロールファイルのConfiguration Managerについて
Configuration Manager サイト コントロール ファイルの埋め込みプロパティ リストを読み取る方法