In System Center 2012 R2 Configuration Manager, you write an embedded property list to a site control file resource by either updating the property list if it already exists, or by creating and adding a new property list to the resource's list of properties.

An embedded property list has the following properties that you can set. For more information, see SMS_EmbeddedPropertyList.

Value Description

PropertyListName

The embedded property name.

Values

An array of string values. Each array item represents a single property list item.

Caution
Making changes to the site control file can cause irreparable damage to your System Center 2012 R2 Configuration Manager site.

To write a site control file embedded property list

  1. Set up a connection to the SMS Provider. For more information, see About the SMS Provider in Configuration Manager.

  2. Using the connection object from step one, get a site control file resource. For more information, see About the Configuration Manager Site Control File.

  3. Get the SMS_EmbeddedPropertyList for the required embedded property list or, if it does not exist, create the SMS_EmbeddedPropertyList object.

  4. Populate the SMS_EmbeddedPropertyList object.

  5. Update the resources property lists with the SMS_EmbeddedPropertyList object.

  6. Commit the changes to the site control file. For more information, see About the Configuration Manager Site Control File.

Example

The following example method writes an embedded property list to a supplied site control file resource (resource). The example works by finding the embedded property list (propertyListName) in the resource and then by replacing the existing values array with the supplied values array (values). If you want to add an item to an existing property values array, you will need to first get the array, resize it, and the add the new array element.

If the embedded property list does not exist, it is created, and then added to the list of existing resource embedded property list.

To view code that calls these methods, see How to Read and Write to the Configuration Manager Site Control File by Using Managed Code

How to Read and Write to the Configuration Manager Site Control File by Using WMI

For information about calling the sample code, see Calling Configuration Manager Code Snippets.

Visual Basic Script  Copy Code
Sub WriteScfEmbeddedPropertyList(connection,  _
	context, 						 _
	resource, 					 _
	propertyListName, 				_
	values)

	Dim found
	Dim vProperty
	 
	found = false

	For each vProperty in resource.PropLists
	 if   UCase(vProperty.PropertyListName) = UCase(propertyListName) Then
			' Found property, so add the property list.
			vProperty.Values = values
			 resource.Put_ , context
			found = true
		End If
	 Next  
				 
	 If found = False Then
		' Property list does not exist, so create it.
		Dim embeddedPropertyList
		Set embeddedPropertyList = connection.Get("SMS_EmbeddedPropertyList").Spawninstance_()
		embeddedPropertyList.PropertyListName = propertyListName
		embeddedPropertyList.Values = values
	
		' If needed, create the property list array.
		If ISNull (resource.PropLists) Then
			resource.PropLists = array(embeddedPropertyList)
		Else
		 ' Add property list to existing property lists.
			dim propertyList
			propertyList = resource.PropLists
			redim preserve propertyList(Ubound (propertyList) +1)
			Set propertyList(Ubound(propertyList)) = embeddedPropertyList
			resource.Proplists = propertyList
		End If
		resource.Put_,context
	End If 
End Sub	
C#  Copy Code
public void WriteScfEmbeddedPropertyList(
	IResultObject resource,
	string propertyListName,
	ArrayList values
	)
{
	try
	{

		Dictionary<string, IResultObject> EmbeddedPropertyList = resource.EmbeddedPropertyLists;

		// Get the property list, or create it. 
		IResultObject ropl;
		if (EmbeddedPropertyList.ContainsKey(propertyListName))
		{
			ropl = EmbeddedPropertyList[propertyListName];
	}
		else
		{
			ConnectionManagerBase connection = resource.ConnectionManager;
			ropl = connection.CreateEmbeddedObjectInstance("SMS_EmbeddedPropertyList");
			EmbeddedPropertyList.Add(propertyListName, ropl);
	}

		// Set the property list properties.
		ropl["PropertyListName"].StringValue = propertyListName;
		ropl["Values"].StringArrayValue = (string[])values.ToArray(typeof(string));
		resource.EmbeddedPropertyLists = EmbeddedPropertyList;

		resource.Put();
}
	catch (SmsException e)
	{
		Console.WriteLine("Failed to write property list: " + e.Message);
		throw;
}
}

The example method has the following parameters:

Parameter

Type

Description

connection

  • Managed: WqlConnectionManager

  • VBScript: SWbemServices

A valid connection to the SMS Provider.

swbemContext (VBScript)

  • VBScript: SWbemContext

A valid context object. For more information, see How to Read and Write to the Configuration Manager Site Control File by Using WMI.

Resource

  • Managed: IResultObject

  • VBScript: SWbemObject

The site control file resource that contains the embedded property.

propertyListName

  • Managed: String

  • VBScript: String

The embedded property list to be written to.

Values

  • Managed: String array

  • VBScript: String array

The SMS_EmbeddedProperty class Values property. An array of string values.

Compiling the Code

The C# example has the following compilation requirements:

Namespaces

System

System.Collections.Generic

System.Collections

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Robust Programming

For more information about error handling, see About Configuration Manager Errors.

Security

For more information about securing Configuration Manager applications, see Securing Configuration Manager Applications.

See Also