2011-10-01 4 views
3

를 사용하여 원격 시스템에 관리자 그룹에서 사용자 계정을 제거합니다. 하지만 내가 다시 내 애플 리케이션을 실행하면 내 listview 에서이 사용자를 참조하십시오. 따라서 사용자는 삭제되지 않았습니다. 아래의 솔루션은 Directory Service의 도움으로 사용자를 삭제하는 것입니다내가 코드를 C# 및 AccountManagment 네임 스페이스

답변

2

AccountManagment 네임 스페이스없이 문제를 해결했습니다.

public bool RemoveUserFromAdminGroup(string computerName, string user) 
{ 
     try 
     { 
      var de = new DirectoryEntry("WinNT://" + computerName); 
      var objGroup = de.Children.Find(Settings.AdministratorsGroup, "group"); 

      foreach (object member in (IEnumerable)objGroup.Invoke("Members")) 
      { 
       using (var memberEntry = new DirectoryEntry(member)) 
        if (memberEntry.Name == user) 
         objGroup.Invoke("Remove", new[] {memberEntry.Path}); 
      } 

      objGroup.CommitChanges(); 
      objGroup.Dispose(); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
      return false; 
     } 
} 
+0

이것은 로컬 또는 원격 컴퓨터 수준 그룹을 열거 할 수있는 유일한 방법이기도합니다. AccountManagement 네임 스페이스는 컴퓨터 수준 그룹에 도메인 수준 보안 주체가있는 경우 몇 가지 문제가 있습니다. 예를 들어 CORP \ myuser를 로컬 Administrators 그룹에 추가하면 GroupPrincipal의 Members 속성이 실패하게됩니다. – jproch

0

...

using System.DirectoryServices 

    private DeleteUserFromActiveDirectory(DataRow in_Gebruiker) 
    { 
      DirectoryEntry AD = new DirectoryEntry(strPathActiveDirectory , 
       strUsername, strPassword) 

      DirectoryEntry NewUser = 
       AD.Children.Find("CN=TheUserName", "User"); 

     AD.Children.Remove(NewUser); 
     AD.CommitChanges(); 
     AD.Close(); 
    } 
+0

이 코드는 도메인의 사용자 그룹에있는 사용자입니다. 하지만 원격 컴퓨터의 관리자 그룹에서 계정을 제거해야합니다. – andDaviD

0

내가 정확히 문제가 무엇인지 모르겠지만 이런 식으로 코딩 :

try 
{ 
    PrincipalContext context = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "passwd"); 

    /* Retreive a user principal 
    */ 
    UserPrincipal user = UserPrincipal.FindByIdentity(context, "user1"); 

    /* Retreive a group principal 
    */ 
    GroupPrincipal adminGroup = GroupPrincipal.FindByIdentity(context, @"dom\Administrateurs"); 

    foreach (Principal p in adminGroup.Members) 
    { 
    Console.WriteLine(p.Name); 
    } 

    adminGroup.Members.Remove(user); 
    adminGroup.Save(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.Message); 
} 

내놔 나 다음과 같은 예외 :

Information about the domain could not be retrieved (1355) 

나에게 보여 줬던 약간의 arround를 파 내라. 대상 도메인에 있지 않은 컴퓨터에서 내 코드를 실행합니다. 서버 자체에서 동일한 코드를 실행하면 작동합니다. 이 코드를 실행하는 컴퓨터는 적어도 대상 도메인의 DNS에 연결해야합니다.