Сервер не хочет обрабатывать запрос, когда я пытаюсь сохранить после удаления участника в Active Directory C#
Я анализирую и изменяю приложение для Windows, предназначенное для синхронизации данных с Active Directory.
Когда я перемещаю пользователей в другой отдел в активном каталоге,
Я пытаюсь удалить члена в предыдущем отделе.
И Member.Remove в порядке, но когда я пытаюсь сохранить его, он выдает исключение, как это
Server is unwilling to process the request
Итак, ничего не изменилось. К сожалению, я новичок в Active Directory, я не знаю, как справиться с этим.
Код ниже. Пожалуйста, поделитесь своими знаниями.
void MoveUser(string ppk, string pk)
{
var aduser = adm.GetUser(pk);
var adde=aduser.GetUnderlyingObject() as DirectoryEntry;
var pde = adm.FindOU(ppk);
if (aduser == null || pde == null)
{
return;
}
adde.MoveTo(pde);
var pgroup = adm.GetGroup(ppk);
if (!aduser.IsMemberOf(pgroup))
{
var allgroups = adm.GetAllDE(Words.Group);
foreach (var sg in allgroups)
{
var samname = GetSamName(sg);
var sgroup = adm.GetGroup(samname);
if (aduser.IsMemberOf(sgroup))
{
sgroup.Members.Remove(aduser);
//exception here
//message: Server is unwilling to process the request
sgroup.Save();
}
}
pgroup.Members.Add(aduser);
pgroup.Save();
}
}
public UserPrincipal GetUser(string sUserName)
{
PrincipalContext oPrincipalContext = GetPrincipalContext();
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, sUserName);
return oUserPrincipal;
}
public DirectoryEntry FindOU(string ouName)
{
DirectorySearcher ds = new DirectorySearcher(GetRootOu());
ds.Filter = "(ou=" + ouName + ")";
try
{
return ds.FindOne().GetDirectoryEntry();
}
catch (Exception)
{
return null;
}
}
public GroupPrincipal GetGroup(string sGroupName)
{
PrincipalContext oPrincipalContext = GetPrincipalContext();
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, sGroupName);
return oGroupPrincipal;
}
1 ответ
Комментарий от олдвец правильный. Отличительное имя - это то, что хранится в member
атрибут группы. Когда вы перемещаете объект, DN меняется.
Однако когда вы перемещаете пользователя, aduser
объект не обновляется с новым местоположением. Поэтому, когда вы сейчас пытаетесь удалить пользователя с помощью aduser
пытается удалить старое DN. Это не сработает.
Вам лучше сначала удалить членство, а затем переместить объект в новое подразделение.