2017-02-23 41 views
0

I`m новичок в Active Directory ....Как обрабатывать исключение DirectoryEnter.CommitChange()? C#

Когда я проверить и отредактировать приложение о Add User And Department в Active Directory с помощью C#,

в DirectoryEnter.CommitChage() делает исключение, как это.

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

Но я уже говорил ранее, я не знаю, хорошо об Active Directory, я путаю, как справиться с этим.

Пожалуйста, помогите мне. код ниже.

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) 
     { 

     } 

    } 


    } 

ответ

0

пытаются сделать переименовывать, прежде чем вносить изменения надеюсь, что это поможет

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

К сожалению I'm поздно, чтобы увидеть ответ. Я добавил ваш код, но он по-прежнему выбрасывает исключение ... –

Смежные вопросы