Как удалить учетную запись компьютера из Active Directory с помощью C # - PullRequest
3 голосов
/ 27 октября 2011

Есть ли образец, который удаляет учетную запись компьютера из AD с помощью C #?

Я искал много источников, но все они касаются учетной записи пользователя.

добавил мой код здесь, по какой-то причине у меня всегда были ошибки.

public static bool checkExistingPC(string compName,string userName,string userPwd )
{
    try
    {
        DirectoryEntry entry = new DirectoryEntry("LDAP://test.com",userName,userPwd,AuthenticationTypes.Secure);
        DirectorySearcher mySearcher = new DirectorySearcher(entry);
       mySearcher.Filter = "(&(objectClass=computer)(|(cn=" + compName + ")(dn=" + compName + ")))";
       foreach (SearchResult result in mySearcher.FindAll())
       {
           if (result != null)
           {

               MessageBox.Show("computer GetDirectoryEntry():" + result.Path+"\n"+"computer path: "+result.Path);
                DirectoryEntry entryToRemove = new DirectoryEntry(result.Path,userName,userPwd);
                 entry.Children.Remove(entryToRemove);

               return true;
           }
           else
           {
               return false;
           }
       }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
    return false;
}

Ответы [ 4 ]

3 голосов
/ 27 октября 2011

Если вы используете .NET 3.5 или более позднюю версию (если вы не обновляете!), Вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM). Читайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в AD:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find the computer in question
ComputerPrincipal computer = ComputerPrincipal.FindByIdentity(ctx, "NAME");

// if found - delete it
if (computer != null)
{
   computer.Delete();
}

Новый S.DS.AM позволяет очень легко играть с пользователями, компьютерами и группами в AD!

2 голосов
/ 27 октября 2011

Используя ADSI, который находится под System.DirectoryServices, используйте механизм фиксации, вот рабочий пример:

/* Retreiving RootDSE infos
 */
string ldapBase = "LDAP://WM2008R2ENT:389/";
string sFromWhere = ldapBase + "rootDSE";
DirectoryEntry root = new DirectoryEntry(sFromWhere, "dom\\jpb", "PWD");
string defaultNamingContext = root.Properties["defaultNamingContext"][0].ToString();

/* Retreiving the computer to remove
 */
sFromWhere = ldapBase + defaultNamingContext;
DirectoryEntry deBase = new DirectoryEntry(sFromWhere, "dom\\jpb", ".biènèsph^r^.1966");

DirectorySearcher dsLookForDomain = new DirectorySearcher(deBase);
dsLookForDomain.Filter = "(&(cn=MACHSUPR))"; // MACHSUPR is the computer to delete
dsLookForDomain.SearchScope = SearchScope.Subtree;
dsLookForDomain.PropertiesToLoad.Add("cn");
dsLookForDomain.PropertiesToLoad.Add("distinguishedName");

SearchResultCollection srcComputer = dsLookForDomain.FindAll();

foreach (SearchResult aComputer in srcComputer)
{
  /* For each computer
   */
  DirectoryEntry computerToDel = aComputer.GetDirectoryEntry();
  computerToDel.DeleteTree();
  computerToDel.CommitChanges();
}
0 голосов
/ 27 октября 2011

Использовать WMI и / или System.DirectoryServices пространство имен (http://msdn.microsoft.com/en-us/library/system.directoryservices.aspx).

0 голосов
/ 27 октября 2011

Это может быть не совсем то, что вы ищете, но этот сайт предоставляет ряд примеров кода для работы с AD в C #, включая удаление группы безопасности и удаление пользователя из группы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...