title: Get all users from Active Directory?
body: <p>I have the following code : </p>
  
  <pre><code>        DirectoryEntry directoryEntry = default(DirectoryEntry);
          // Binding object. 
          DirectoryEntry objGroupEntry = default(DirectoryEntry);
          // Group Results. 
          DirectorySearcher objSearchADAM = default(DirectorySearcher);
          // Search object. 
          SearchResultCollection objSearchResults = default(SearchResultCollection);
          // Binding path. 
          ActiveDirectory result = new ActiveDirectory();
          ActiveDirectoryItem treeNode;
  
      string adServer = ADTestProject.Properties.Settings.Default.Server;
      string adDomain = ADTestProject.Properties.Settings.Default.Domain;
      string adUsername = ADTestProject.Properties.Settings.Default.AdiminUsername;
      string password = ADTestProject.Properties.Settings.Default.Password;
  
      string[] dc = adDomain.Split('.');
  
      string dcAdDomain = string.Empty;
  
      foreach (string item in dc)
      {
          if (dc[dc.Length - 1].Equals(item))
              dcAdDomain = dcAdDomain + "DC=" + item;
          else
              dcAdDomain = dcAdDomain + "DC=" + item + ",";
      }
  
      // Get the AD LDS object. 
  
          if (pathToAD.Length &gt; 0)
              directoryEntry = new DirectoryEntry("LDAP://" + adServer + "/CN=Users," + dcAdDomain, adUsername, password);
          else
              directoryEntry = new DirectoryEntry();
  
          DirectorySearcher ds = new DirectorySearcher(directoryEntry);
          ds.SearchScope = SearchScope.Subtree;
          ds.Filter = "(&amp;(objectClass=group))";
  
          objSearchResults = ds.FindAll();
  </code></pre>
  
  <p>And then this : </p>
  
  <pre><code>if (objSearchResults.Count != 0)
  {
      foreach (SearchResult objResult in objSearchResults)
      {
          objGroupEntry = objResult.GetDirectoryEntry();
          result.ActiveDirectoryTree.Add(new ActiveDirectoryItem() 
          { Id = objGroupEntry.Guid, 
              ParentId = objGroupEntry.Parent.Guid, 
              AccountName = objGroupEntry.Name, 
              Type = ActiveDirectoryType.Group, 
              PickableNode = false 
          });
  
          foreach (object child in objGroupEntry.Properties["member"])
          {
              treeNode = new ActiveDirectoryItem();
              var path = child.ToString().Replace;
              using (var memberEntry = new DirectoryEntry(path))
              {
  
                  if (memberEntry.Username != null &amp;&amp; memberEntry.SchemaEntry.Name.CompareTo("group") != 0 
                      &amp;&amp; memberEntry.Properties.Contains("sAMAccountName") &amp;&amp; memberEntry.Properties.Contains("objectSid"))
                  {
                      treeNode.Id = Guid.NewGuid();
                      treeNode.ParentId = objGroupEntry.Guid;
                      treeNode.AccountName = memberEntry.Properties["sAMAccountName"][0].ToString();
                      treeNode.Type = ActiveDirectoryType.User;
                      treeNode.PickableNode = true;
                      treeNode.FullName = memberEntry.Properties["Name"][0].ToString();
  
                      byte[] sidBytes = (byte[])memberEntry.Properties["objectSid"][0];
                      treeNode.ObjectSid = new System.Security.Principal.SecurityIdentifier(sidBytes, 0).ToString();
  
                      result.ActiveDirectoryTree.Add(treeNode);
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>The Child.ToString could look like this : </p>
  
  <pre><code>CN=S-1-5-18,CN=ForeignSecurityPrincipals,DC=MyDomain,DC=local
  </code></pre>
  
  <p>The problem is that memberEntry get a lot of exceptions on its properties? Why?</p>
  
  <p>The exception is this : </p>
  
  <blockquote>
    <p>'memberEntry.Name' threw an exception of type
    'System.Runtime.InteropServices.COMException' string
    {System.Runtime.InteropServices.COMException} - Unspecified error
    -2147467259</p>
    
    <p>Stacktrace :    at
    System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)<br>
    at System.DirectoryServices.DirectoryEntry.Bind()    at
    System.DirectoryServices.DirectoryEntry.get_Name()</p>
  </blockquote>