views:

19

answers:

1

I am using below code to query changes to users/OUs in AD. But it doesn't retrive any deleted objects, Any idea how to include deleted objects in this ?

static void Main(string[] args)
        {
 BinaryFormatter bFormat = new BinaryFormatter();
            byte[] cookie = null;
            string strFileName = "cookie.bin";
            if (File.Exists(strFileName))
            {
                using (FileStream fsStream = new FileStream(strFileName, FileMode.OpenOrCreate))
                {
                    cookie = (byte[])bFormat.Deserialize(fsStream);
                }
            }


            string str_dcName = "xxxxx"; 
            System.DirectoryServices.DirectoryEntry rootDSE = new System.DirectoryServices.DirectoryEntry("LDAP://rootDSE");
            System.Net.NetworkCredential cr = new System.Net.NetworkCredential(@"xxx", "xxx", "xxx");
            LdapConnection connection = new LdapConnection(str_dcName);
            connection.Credential = cr;
            connection.Bind();

            string[] attribs = new string[3];
            attribs[0] = "name";
            attribs[1] = "description";
            attribs[2] = "objectGUID";

            SearchRequest request = new SearchRequest("DC=xxx,DC=xxx,DC=com", "(objectClass=*)", SearchScope.Subtree, attribs);

            DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(cookie, DirectorySynchronizationOptions.IncrementalValues, Int32.MaxValue);
            request.Controls.Add(dirSyncRC);

            bool bMoreData = true;
            SearchResponse searchResponse = (SearchResponse)connection.SendRequest(request);

            while (bMoreData) //Initial Search handler - since we're unable to combine with paged search
            {
                foreach (SearchResultEntry entry in searchResponse.Entries)
                {
                    System.Collections.IDictionaryEnumerator attribEnum = entry.Attributes.GetEnumerator();
                    while (attribEnum.MoveNext())//Iterate through the result attributes
                        {
                        //Attributes have one or more values so we iterate through all the values 
                        //for each attribute
                        DirectoryAttribute subAttrib = (DirectoryAttribute)attribEnum.Value;
                        for (int ic = 0; ic < subAttrib.Count; ic++) {
                            //Attribute Name below
                            Console.WriteLine(attribEnum.Key.ToString());
                            //Attribute Sub Value below
                            Console.WriteLine(subAttrib[ic].ToString());
                        }
                    }
                }

                //Get the cookie from the response to use it in next searches


                foreach (DirectoryControl control in searchResponse.Controls)
                {
                    if (control is DirSyncResponseControl)
                    {
                        DirSyncResponseControl dsrc = control as DirSyncResponseControl;
                        cookie = dsrc.Cookie;
                        bMoreData = dsrc.MoreData;
                        break;
                    }
                }
                dirSyncRC.Cookie = cookie;
                searchResponse = (SearchResponse)connection.SendRequest(request);
            }


            //Serialize the cookie into a file to use in next searches
            using (FileStream fsStream = new FileStream(strFileName, FileMode.Create))
            {
                //Serialize the data to the steam. To get the data for 
                //the cookie, call the GetDirectorySynchronizationCookie method.
               bFormat.Serialize(fsStream, cookie);
            }

            Console.WriteLine("Finished search...");
            Console.ReadKey(); 

           }
A: 

solution is need to add isDeleted=TRUE to request object

SearchRequest request = new SearchRequest("DC=xx,DC=xxx,DC=com", "(|(objectClass=organizationalUnit)(isDeleted=TRUE)(objectCategory=Person))", SearchScope.Subtree, attribs);

kakopappa