次の方法で共有


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

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

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

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

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

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

注意

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

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

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

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

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

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

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

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

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

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

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

次の 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 管理インストルメンテーションConfiguration Manager サイト コントロール ファイルについてConfiguration Manager サイト コントロール ファイルの埋め込みプロパティ リストを読み取る方法