2016-04-14 9 views
0

Active DirectoryおよびNovell e-Directoryツリー内のアカウントを削除する必要があるレポートを生成するコンソールアプリケーションを作成しました。このプログラムは、私の会社の要件に関係する非常に有益なリストを生成するのに最適です。ディレクトリサービスを使用してユーザーをプログラムで削除する

私はこのプログラムを強化して、特定のアカウントを追加削除できるかどうかを確認するように求められました。

私は、異なるツリーへの接続にDirectory.Servicesを使用しています。この接続タイプを変更したくないです。これで、検索のルートにあるオブジェクトを正常に削除できます。私の問題は、サブユニットで見つかったuserobjectsを削除できないようです。ここで

は、ユーザーオブジェクトを削除し、私の機能のために私が持っているコードは、私はエラーチェックを削除しましたし、内部情報を与えないように、領域の一部と改名...

static void Perform_Deletions(List<UserAccountObject> User_List, DirectoryEntry myLdapConnection) 
{ 
    DirectoryEntry userToDelete; 
    myLdapConnection.RefreshCache(); 

    string cnRegex = @"^([^,]+)"; 
    Regex myCNRegex = new Regex(cnRegex, RegexOptions.IgnoreCase); 

    foreach(UserAccountObject user in User_List) 
    { 
     foreach(Match myMatch in myCNRegex.Matches(user.Distinguished_Name)) 
     { 
      string cn = myMatch.ToString(); 
      userToDelete = myLdapConnection.Children.Find(cn); 
      myLdapConnection.Children.Remove(userToDelete); 
      myLdapConnection.CommitChanges(); 
     } 
    } 
} 

です。しかし、とにかく。私の問題はおそらくこのコードの第10行にあると確信しています。この行を変更するか、この関数を変更して、最初のDirectoryEntryが "LDAP://server1.contoso.com/OU=users,DC=contoso,DC=com"になっている場合はどうすればよいですか。ユーザーオブジェクトが "OU = Team1、OU = users、DC = contoso、DC = com"にある場合も削除されますか?

現在のところ、このコードでは、元のエントリのすべてのユーザーは、ADまたは電子ディレクトリのいずれかで削除されます。

事前にすべてのヘルプに感謝します!

答えて

0

私の要件に適したソリューションをプログラムできましたが、削除する必要がある各DNのディレクトリサーバーへの接続を作成して破棄する必要があるため、おそらくこれが最適なソリューションではないと思います。 1つの接続で削除されるDNのリストを送信する方法があります。

static void Perform_Deletions(List<UserAccountObject> User_List, string directory) 
    { 
     string ldapServer = null; 
     string parentOU = null; 
     string userCN = null; 
     string ldapDirectory = null; 
     string userName = null; 
     string passWord = null; 

     // REGEX value to only return OU path portion of User DN 
     string dnSuffixRegex = @"ou.*"; 
     Regex myDNRegex = new Regex(dnSuffixRegex, RegexOptions.IgnoreCase); 

     // REGEX to only Return the CN portion of User DN 
     string cnRegex = @"^([^,]+)"; 
     Regex myCNRegex = new Regex(cnRegex, RegexOptions.IgnoreCase); 

     switch (directory) 
     { 
      case "AD1": 
       { 
        ldapDirectory = "LDAP://ad1.contosoe.com/"; 
        userName = "Admin"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      case "AD2": 
       { 
        ldapDirectory = "LDAP://ad2.contosof.com/"; 
        userName = "Admin"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      case "EDIR1": 
       { 
        ldapDirectory = "LDAP://edirectory1.contosoc.com/"; 
        userName = @"cn=Admin,o=Root"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      case "AD3": 
       { 
        ldapDirectory = "LDAP://ad3.contosod.com/"; 
        userName = "Admin"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      case "EDIR2": 
       { 
        ldapDirectory = "LDAP://edirectory2.contosob.com/"; 
        userName = @"cn=Admin,o=Root"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      case "EDIR3": 
       { 
        ldapDirectory = "LDAP://edirectory3.contosoa.com/"; 
        userName = @"cn=Admin,o=Root"; 
        passWord = @"[email protected]$$W0rd1"; 

        break; 
       } 
      default: 
       { 
        break; 
       } 
     } 

     foreach (UserAccountObject user in User_List) 
     { 
      foreach (Match cnMatch in myCNRegex.Matches(user.Distinguished_Name)) 
      { 
       userCN = cnMatch.ToString(); 
      } 

      foreach (Match dnMatch in myDNRegex.Matches(user.Distinguished_Name)) 
      { 
       parentOU = dnMatch.ToString(); 
      } 

      ldapServer = ldapDirectory + parentOU; 

      try 
      { 
       DirectoryEntry myLdapconnection = new DirectoryEntry(ldapServer, userName, passWord, AuthenticationTypes.ServerBind); 
       DirectoryEntry userToDelete = myLdapconnection.Children.Find(userCN); 
       myLdapconnection.RefreshCache(); 
       myLdapconnection.Children.Remove(userToDelete); 
       myLdapconnection.CommitChanges(); 
       myLdapconnection.Close(); 
       myLdapconnection.Dispose(); 
       user.Deletion_Status = "SUCCEEDED"; 
      } 
      catch (Exception e) 
      { 
       user.Deletion_Status = "FAILED"; 
       Console.WriteLine("Exception Caught:\n\n{0}", e.ToString()); 
      } 
     } 
    } 
関連する問題