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_FileDefinition
SMS_SCI_SiteDefinition
払う必要があります。 これらのクラスは、サイト コントロール ファイル自体を管理します。 注意しないと、サイトを役に立たないようにすることができます。
サイト コントロール ファイルに書き込むには
SMS プロバイダーへの接続を設定します。 詳細については、「 SMS プロバイダーの基礎」を参照してください。
コンテキスト データを
SWbemNameValue
保持する値セットを作成します。クラス から
SMS_SiteControlFile
セッション ハンドルを取得しますGetSessionHandle
。セッション ハンドルをコンテキスト データに追加します。
オブジェクト
RefreshSCF
をSMS_SiteControlFile
呼び出して、サイト コントロール ファイルの最新のコピーを取得します。 呼び出しでコンテキスト データを使用します。コンテキスト データを使用して更新するサイト コントロール ファイル リソースのクエリを実行します。
コンテキスト データを使用してリソースを更新します。
オブジェクト メソッドを使用して、サイト コントロール ファイルに変更を
SMS_SiteControlFile
コミットしますCommitSCF
。オブジェクト
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 サイト コントロール ファイルの埋め込みプロパティ リストを読み取る方法