Can anyone provide an example of how to loop through a System.DirectoryServices.PropertyCollection and output the property name and value?
I am using C#.
@JaredPar - The PropertyCollection does not have a Name/Value property. It does have a PropertyNames and Values, type System.Collection.ICollection. I do not know the basline object type that makes up the PropertyCollection object.
@JaredPar again - I originally mislabeled the question with the wrong type. That was my bad.
Update: Based on Zhaph - Ben Duguid input, I was able to develop the following code.
using System.Collections;
using System.DirectoryServices;
public void DisplayValue(DirectoryEntry de)
{
if(de.Children != null)
{
foreach(DirectoryEntry child in de.Children)
{
PropertyCollection pc = child.Properties;
IDictionaryEnumerator ide = pc.GetEnumerator();
ide.Reset();
while(ide.MoveNext())
{
PropertyValueCollection pvc = ide.Entry.Value as PropertyValueCollection;
Console.WriteLine(string.Format("Name: {0}", ide.Entry.Key.ToString()));
Console.WriteLine(string.Format("Value: {0}", pvc.Value));
}
}
}
}
See the value of PropertyValueCollection at runtime in the watch window to identify types of element, it contains & you can expand on it to further see what property each of the element has.
Adding to @JaredPar's code
PropertyCollection collection = GetTheCollection();
foreach ( PropertyValueCollection value in collection ) {
// Do something with the value
Console.WriteLine(value.PropertyName);
Console.WriteLine(value.Value);
Console.WriteLine(value.Count);
}
EDIT: PropertyCollection is made up of PropertyValueCollection
The PropertyCollection has a PropertyName collection - which is a collection of strings (see PropertyCollection.Contains and PropertyCollection.Item both of which take a string).
You can usually call GetEnumerator to allow you to enumerate over the collection, using the usual enumeration methods - in this case you'd get an IDictionary containing the string key, and then an object for each item/values.
usr = result.GetDirectoryEntry();
foreach (string strProperty in usr.Properties.PropertyNames)
{
Console.WriteLine("{0}:{1}" ,strProperty, usr.Properties[strProperty].Value);
}
foreach(var k in collection.Keys)
{
string name = k;
string value = collection[k];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With