Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I loop through a PropertyCollection

Tags:

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));                
            }
        }      
    }  
}
like image 673
Michael Kniskern Avatar asked Mar 12 '09 22:03

Michael Kniskern


4 Answers

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

like image 145
shahkalpesh Avatar answered Sep 29 '22 05:09

shahkalpesh


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.

like image 34
Zhaph - Ben Duguid Avatar answered Sep 29 '22 04:09

Zhaph - Ben Duguid


usr = result.GetDirectoryEntry();
foreach (string strProperty in usr.Properties.PropertyNames)
{
   Console.WriteLine("{0}:{1}" ,strProperty, usr.Properties[strProperty].Value);
}
like image 40
Vladimir Avatar answered Sep 29 '22 04:09

Vladimir


foreach(var k in collection.Keys) 
{
     string name = k;
     string value = collection[k];
}
like image 45
antonioh Avatar answered Sep 29 '22 06:09

antonioh