IADsPropertyList
The IADsPropertyList interface is used to modify, read, and update a list of property entries in the property cache of an object. It serves to enumerate, modify, and purge the contained property entries. Use the enumeration method of this interface to identify initialized properties. This is different from using the schema to determine all possible attributes that a directory object can have and which properties have been set.
Call methods of this interface to examine and manipulate the property list on the client. Before calling the methods of this interface, you need to call IADs::GetInfo or IADs::GetInfoEx explicitly to load the assigned property values of the object into the cache. After calling the methods of this interface, call IADs::SetInfo to save the changes in the persistent store of the directory.
Inheritance: IDispatch
Methods
-
Method
-
Description
-
GetPropertyItem()
-
Gets the value of a property by name.
-
Item()
-
Gets a property that is specified by name or by index.
-
Next()
-
Gets the next item in the property list.
-
PurgePropertyList()
-
Deletes all properties from the list and releases the property caches.
-
PutPropertyItem()
-
Updates the values for an item in the property list.
-
Reset()
-
Moves back to the start of the list.
-
ResetPropertyItem()
-
Removes the specified item from the list.
-
Skip()
-
Skips a specified number of items, counting from the current cursor position, in the property list.
Properties
-
Property
-
Description
-
PropertyCount
-
Gets the number of properties in the property list.
Details
GetPropertyItem()
Gets the value of a property by name.
object GetPropertyItem(string propItemName, ADSTYPEENUM type)
Parameters
- propItemName - Specifies the name of the requested property.
- type - Specifies the data type to be used in interpreting the requested property. If the type is unknown, this parameter can be set to ADSTYPE_UNKNOWN.
Return value
The method returns a property entry that exposes the IADsPropertyEntry interface.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $userPath = "Adaxes://CN=John Smith,CN=Users,DC=domain,DC=com" $user = $service.OpenObject($userPath, $null, $null, 0) $user.GetInfo() $propertyEntry = $user.GetPropertyItem("otherHomePhone", "ADSTYPE_CASE_IGNORE_STRING") foreach ($value in $propertyEntry.Values) { # Use the CaseIgnoreString property because the ADSTYPE_CASE_IGNORE_STRING # type was requested in GetPropertyItem. Write-Host $value.CaseIgnoreString }
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string userPath = "Adaxes://CN=John Smith,CN=Users,DC=domain,DC=com"; IADs user = (IADs)service.OpenObject(userPath, null, null, 0); user.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)user; IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.GetPropertyItem("otherHomePhone", ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING); foreach (IADsPropertyValue value in (Array)propertyEntry.Values) { // Use the CaseIgnoreString property because the ADSTYPE_CASE_IGNORE_STRING // type was requested in GetPropertyItem. Console.WriteLine(value.CaseIgnoreString); } } }
Item()
Gets a property that is specified by name or by index.
object Item(object index)
Parameters
The index parameter is an object that contains the index or name of the property to be retrieved.
Return value
The method returns a property entry that exposes the IADsPropertyEntry interface.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $ouPath = "Adaxes://OU=My OU,DC=domain,DC=com" $ou = $service.OpenObject($ouPath, $null, $null, 0) $ou.GetInfo() $propertyEntry = $ou.Item("name") Write-Host "Property name:"$propertyEntry.Name ` "Property AdsType:"$propertyEntry.ADsType
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string ouPath = "Adaxes://OU=My OU,DC=domain,DC=com"; IADs ou = (IADs)service.OpenObject(ouPath, null, null, 0); ou.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)ou; IADsPropertyEntry propertyEntry = (IADsPropertyEntry) propertyList.Item("name"); Console.WriteLine("Property name: {0}, Property AdsType: {1}", propertyEntry.Name, propertyEntry.ADsType); } }
Next()
Gets the next item in the property list.
object Next()
Return value
The method returns a property entry that exposes the IADsPropertyEntry interface.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $domainPath = "Adaxes://DC=domain,DC=com" $domain = $service.OpenObject($domainPath, $null, $null, 0) $domain.GetInfo() $propertyCount = $domain.PropertyCount for ($i = 0; $i -lt $propertyCount; $i++) { $propertyEntry = $domain.Next() Write-Host "Property name:"$propertyEntry.Name ` "Property AdsType:"$propertyEntry.ADsType }
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string domainPath = "Adaxes://DC=domain,DC=com"; IADs domain = (IADs)service.OpenObject(domainPath, null, null, 0); domain.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)domain; int propertyCount = propertyList.PropertyCount; for (int i=0; i < propertyCount; i++) { IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.Next(); Console.WriteLine("Property name: {0}, Property AdsType: {1}", propertyEntry.Name, propertyEntry.ADsType); } } }
PurgePropertyList()
Deletes all properties from the list and releases the property caches.
void PurgePropertyList()
Remarks
When this method is called, all the items are removed from the cache. Thus, calling GetPropertyItem
after that will generate an error. Be aware that PurgePropertyList
only affects the contents of the cache and does not affect the properties on the actual object in the directory. Calling IADs::SetInfo after calling PurgePropertyList
does not delete the properties of the directory object.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $ouPath = "Adaxes://OU=My OU,DC=domain,DC=com" $ou = $service.OpenObject($ouPath, $null, $null, 0) $ou.GetInfo() # Output the number of items in the property list # before calling the PurgePropertyList method Write-Host $ou.PropertyCount # Clear the property list. $ou.PurgePropertyList() # Output the number of items in the property list # after calling the PurgePropertyList method Write-Host $ou.PropertyCount
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string ouPath = "Adaxes://OU=My OU,DC=domain,DC=com"; IADs ou = (IADs)service.OpenObject(ouPath, null, null, 0); ou.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)ou; // Output the number of items in the property list // before calling the PurgePropertyList method Console.WriteLine(propertyList.PropertyCount); // Clear the property list. propertyList.PurgePropertyList(); // Output the number of items in the property list // after calling the PurgePropertyList method Console.WriteLine(propertyList.PropertyCount); } }
PutPropertyItem()
Updates the values for an item in the property list.
void PutPropertyItem(object item)
Parameters
The item parameter represents new property values to be put in the property cache. The object passed to this method must expose the IADsPropertyEntry interface.
Remarks
The IADsPropertyEntry::ControlCode property should be set to the desired modify, add, or delete operation by using the proper ADS_PROPERTY_OPERATION_ENUM value. After PutPropertyItem
is called, call IADs::SetInfo to persist any changes in the directory. The property values are not committed until the method is called.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $userPath = "Adaxes://CN=John Smith,CN=Users,DC=domain,DC=com" $user = $service.OpenObject($userPath, $null, $null, 0) $user.GetInfo() # Create a property value $propertyValue = New-Object "Softerra.Adaxes.Adsi.AdsPropertyValue" $propertyValue.CaseIgnoreString = "My Description" $propertyValue.ADsType = "ADSTYPE_CASE_IGNORE_STRING" # Create a property entry $propertyEntry = New-Object "Softerra.Adaxes.Adsi.AdsPropertyEntry" $propertyEntry.Name = "description" $propertyEntry.Values = @([Softerra.Adaxes.Interop.Adsi.Cache.IADsPropertyValue]$propertyValue) $propertyEntry.ControlCode = "ADS_PROPERTY_UPDATE" $propertyEntry.ADsType = "ADSTYPE_CASE_IGNORE_STRING" # Add the property entry to the property list $user.PutPropertyItem($propertyEntry) # Commit changes to the directory store $user.SetInfo()
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string userPath = "Adaxes://CN=John Smith,CN=Users,DC=domain,DC=com"; IADs user = (IADs)service.OpenObject(userPath, null, null, 0); user.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)user; // Create a property value IADsPropertyValue propertyValue = new AdsPropertyValue(); propertyValue.CaseIgnoreString = "My Description"; propertyValue.ADsType = ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING; // Create a property entry IADsPropertyEntry propertyEntry = new AdsPropertyEntry(); propertyEntry.Name = "description"; object[] values = {propertyValue}; propertyEntry.Values = values; propertyEntry.ControlCode = ADS_PROPERTY_OPERATION_ENUM.ADS_PROPERTY_UPDATE; propertyEntry.ADsType = ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING; // Add the property entry to the property list propertyList.PutPropertyItem(propertyEntry); // Commit changes to the directory store user = (IADs)propertyList; user.SetInfo(); } }
Reset()
Moves back to the start of the list.
void Reset()
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $domainPath = "Adaxes://DC=domain,DC=com" $domain = $service.OpenObject($domainPath, $null, $null, 0) $domain.GetInfo() $propertyCount = $domain.PropertyCount Write-Host "Walking up the property list before item reset:" for ($i = 0;$i -ne $propertyCount; $i++) { $propertyEntry = $domain.Next() Write-Host "Property name:"$propertyEntry.Name } # Move the cursor to the beginning of the list $domain.Reset() Write-Host "Walking up the property list after item reset:" for ($i = 0;$i -ne $propertyCount; $i++) { $propertyEntry = $propertyList.Next() Write-Host "Property name:"$propertyEntry.Name }
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; internal class Program { private static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string domainPath = "Adaxes://DC=domain,DC=com"; IADs domain = (IADs) service.OpenObject(domainPath, null, null, 0); domain.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList) domain; Console.WriteLine("Walking up the property list before item reset:"); int propertyCount = propertyList.PropertyCount; for (int i = 0; i < propertyCount; i++) { IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.Next(); Console.WriteLine("Property name: {0}", propertyEntry.Name); } // Move the cursor to the beginning of the list propertyList.Reset(); Console.WriteLine("Walking up the property list after item reset:"); for (int i = 0; i < propertyCount; i++) { IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.Next(); Console.WriteLine("Property name: {0}", propertyEntry.Name); } } }
ResetPropertyItem()
Removes the specified item from the list.
void ResetPropertyItem(object data)
Parameters
The data parameter specifies the property entry to be reset. You can specify the item to be removed by name (as a string) or by index (as an Integer).
Remarks
This method only affects the contents of the cache and does not affect the properties on the actual object in the directory. Calling IADs::SetInfo after calling ResetPropertyItem
does not delete the properties of the directory object.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $userPath = "Adaxes://CN=John Smith,CN=Users, DC=domain,DC=com" $user = $service.OpenObject($userPath, $null, $null, 0) $user.GetInfo() # Create a property value $propertyValue = New-Object "Softerra.Adaxes.Adsi.AdsPropertyValue" $propertyValue.CaseIgnoreString = "My Description" $propertyValue.ADsType = "ADSTYPE_CASE_IGNORE_STRING" # Create a property entry $propertyEntry = New-Object "Softerra.Adaxes.Adsi.AdsPropertyEntry" $propertyEntry.Name = "description" $propertyEntry.Values = @([Softerra.Adaxes.Interop.Adsi.Cache.IADsPropertyValue]$propertyValue) $propertyEntry.ControlCode = "ADS_PROPERTY_UPDATE" $propertyEntry.ADsType = "ADSTYPE_CASE_IGNORE_STRING" # Add the property entry to the property list $user.PutPropertyItem($propertyEntry) # Commit changes to the directory store $user.SetInfo() $user.GetInfo() Write-Host "Number of Properties = "$user.PropertyCount $user.ResetPropertyItem("description") # The property count should have been reduced by one Write-Host "Number of Properties = "$user.PropertyCount
- C#
-
using System; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; class Program { static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string userPath = "Adaxes://CN=John Smith,CN=Users,DC=domain,DC=com"; IADs user = (IADs)service.OpenObject(userPath, null, null, 0); user.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)user; // Create a property value IADsPropertyValue propertyValue = new AdsPropertyValue(); propertyValue.CaseIgnoreString = "My Description"; propertyValue.ADsType = ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING; // Create a property entry IADsPropertyEntry propertyEntry = new AdsPropertyEntry(); propertyEntry.Name = "description"; object[] values = { propertyValue }; propertyEntry.Values = values; propertyEntry.ControlCode = ADS_PROPERTY_OPERATION_ENUM.ADS_PROPERTY_UPDATE; propertyEntry.ADsType = ADSTYPEENUM.ADSTYPE_CASE_IGNORE_STRING; // Add the property entry to the property list propertyList.PutPropertyItem(propertyEntry); // Commit changes to the directory store user = (IADs)propertyList; user.SetInfo(); user.GetInfo(); propertyList = (IADsPropertyList)user; Console.WriteLine("Number of Properties = {0}", propertyList.PropertyCount); propertyList.ResetPropertyItem("description"); // The property count should have been reduced by one Console.WriteLine("Number of Properties = {0}", propertyList.PropertyCount); } }
Skip()
Skips a specified number of items, counting from the current cursor position, in the property list.
void Skip(int count)
Parameters
The count parameter specifies the number of elements to skip.
Examples
- PowerShell
-
[Reflection.Assembly]::LoadWithPartialName("Softerra.Adaxes.Adsi") # Connect to the Adaxes service $ns = New-Object "Softerra.Adaxes.Adsi.AdmNamespace" $service = $ns.GetServiceDirectly("localhost") # Bind to object $domainPath = "Adaxes://DC=domain,DC=com" $domain = $service.OpenObject($domainPath, $null, $null, 0) $domain.GetInfo() $propertyCount = $domain.PropertyCount Write-Host "Walking up the property list without skipping:" for ($i = 0;$i -ne $propertyCount; $i++) { $propertyEntry = $domain.Next() Write-Host "Property name:"$propertyEntry.Name } # Move the cursor to the beginning of the list $domain.Reset() Write-Host "Iterate the property list, skipping every other element:" for ($i = 0;$i -ne $propertyCount; $i+=2) { $domain.Skip(1) try { $propertyEntry = $domain.Next() Write-Host "Property name:"$propertyEntry.Name } catch [System.Runtime.InteropServices.COMException] { break; } }
- C#
-
using System; using System.Runtime.InteropServices; using Softerra.Adaxes.Interop.Adsi; using Softerra.Adaxes.Adsi; using Softerra.Adaxes.Interop.Adsi.Cache; using Softerra.Adaxes.Interop.Adsi.PersistentObjects; internal class Program { private static void Main(string[] args) { // Connect to the Adaxes service AdmNamespace ns = new AdmNamespace(); IAdmService service = ns.GetServiceDirectly("localhost"); // Bind to object const string domainPath = "Adaxes://DC=domain,DC=com"; IADs domain = (IADs)service.OpenObject(domainPath, null, null, 0); domain.GetInfo(); IADsPropertyList propertyList = (IADsPropertyList)domain; Console.WriteLine("Walking up the property list without skipping:"); int propertyCount = propertyList.PropertyCount; for (int i = 0; i < propertyCount; i++) { IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.Next(); Console.WriteLine("Property name: {0}", propertyEntry.Name); } // Move the cursor to the beginning of the list propertyList.Reset(); Console.WriteLine("Parsing the property list, skipping every other element:"); for (int i = 0; i < propertyCount; i += 2) { propertyList.Skip(1); try { IADsPropertyEntry propertyEntry = (IADsPropertyEntry)propertyList.Next(); Console.WriteLine("Property name: {0}", propertyEntry.Name); } catch (COMException) { break; } } } }
PropertyCount
Gets the number of properties in the property list.
- Type:
- int
- Access:
- Read-only
Requirements
Minimum required version: 2009.1