我正在分析和修改將數據同步到Active Directory的Windows應用程序。服務器不願處理請求,當我嘗試保存後刪除成員在Active Directory C#
當我移動的用戶在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;
}
如果您嘗試從組中刪除用戶,然後將其移至新OU,該怎麼辦。 LDAP級別上的組成員身份基於專有名稱,並且您更改了用戶DN。另一種選擇是查詢用戶,更改DN,然後再次詢問用戶主管 – oldovets
是的,您的方法是正確的。我改變了你的流程的方法,它的工作原理。感謝您的詳細解釋! –