2017-02-23 2 views
0

I`m ein Neuling von Active Directory ....Wie behandelt man DirectoryEnter.CommitChange() Ausnahme ?? C#

Wenn ich eine Anwendung über Add User And Department auf Active Directory mit C# überprüfen und bearbeiten,

in DirectoryEnter.CommitChage() macht eine Ausnahme wie diese.

The directory service cannot perform the requested operation on the RDN attribute of an object.

Aber ich bereits erwähnt, ich weiß nicht, gut über Active Directory, ich bin verwirrend, wie es zu handhaben.

Bitte jemand mir helfen. Code ist unten.

void CreateADUser(string ppk,string pk,DataRow row) 
{ 
    string pass = GetPass(pk,row,LogSections.AD); 
    DirectoryEntry addept = adm.FindOU(ppk); 
    string sOU = adm.GetPrincipalPath(addept); 
    var aduser = adm.CreateNewUser(sOU, pk, pass, pk, null, null, adm.sDomain); 
    SetAdUserProperties(pk, pass, row); 
    MoveUser(ppk,pk); 
} 



void SetAdUserProperties(string pk,string pass,DataRow row) 
{ 
    if (row == null) return; 
    List<ADMapping> MappingPatterns = GetAdMappings(Words.User,false); 
    var colnames = Tool.GetColNames(row); 
    var aduser = adm.GetUser(pk); 
    var de=aduser.GetUnderlyingObject() as DirectoryEntry; 
    foreach (var ADMap in MappingPatterns) 
    { 
     string val = ADMap.Mapping; 
     val=Util.ReplaceColPattern(val, row); 
     SetProperty(de, ADMap.CN, val); 
    } 
    if (!string.IsNullOrWhiteSpace(pass)) 
    { 
     var UserPkColumn = AppConfigHelper.GetAppString(Words.SourceUserPKColumn); 
     UserPkColumn = Util.GetActualColName(UserPkColumn); 
     aduser.SetPassword(pass); 
     QueryHelper.Update(QueryHelper.ConnectionString, Words.ShadowUserTable 
        ,new SqlParameter[] { new SqlParameter("@passwd", pass) } 
        , new SqlParameter("@"+UserPkColumn,pk)); 
    } 

    aduser.Save(); 
} 

public void SetProperty(DirectoryEntry oDE, string sPropertyName, object sPropertyValue) 
{ 
    if (sPropertyValue != null && !string.IsNullOrWhiteSpace(sPropertyValue.ToString())) 
    { 
     if (oDE.Properties.Contains(sPropertyName)) 
     { 
      oDE.Properties[sPropertyName].Value = sPropertyValue; 
     } 
     else 
     { 
      oDE.Properties[sPropertyName].Add(sPropertyValue); 
     } 
     try 
     { 
      oDE.CommitChanges(); //exception here. 
      oDE.Close(); 
     } 
     catch (Exception) 
     { 

     } 

    } 


    } 

Antwort

0

Versuch Umbenennungs zu tun, bevor die Änderungen fest hoffen, dass es

oDE.Rename("name=$name"); 
    oDE.CommitChanges(); 
+0

Leider I'm spät helfen wird Ihre Antwort zu sehen. Ich habe deinen Code hinzugefügt, aber es löst immer noch eine Ausnahme aus ... –

Verwandte Themen