不计费服务器:Can';t解锁代码中的AD帐户
本文关键字:代码 解锁 帐户 AD 服务器 计费 Can | 更新日期: 2023-09-27 18:26:16
当我尝试使用自己的C#程序解锁AD帐户时,我会收到以下错误:
System.DirectoryServices.DirectoryServicesCOMException(0x80072035):服务器不愿意处理该请求。
这是我用来解锁帐户的代码:
// "ldap" is an instance of my own class for accessing an LDAP server
using (DirectoryEntry entry = ldap.GetEntry(objectGuid))
{
entry.InvokeSet("lockouttime", 0);
// I also tried:
entry.Properties["lockouttime"].Clear();
entry.CommitChanges();
}
我在多个域中使用此软件,但只在其中一个域中出现此错误,我不知道有什么区别。当我使用dsa.msc
解锁帐户时,一切都很好。
该错误也发生在不同的用户对象中,但两个版本(Clear
和InvokeSet
)都适用于其他环境。有人能给我一个提示吗?
附言:我使用域管理员凭据访问LDAP服务器。
试试这个例子:
public void Unlock(string userDn)
{
try
{
DirectoryEntry uEntry = new DirectoryEntry(userDn);
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.CommitChanges(); //may not be needed but adding it anyways
uEntry.Close();
}
catch (System.DirectoryServices.DirectoryServicesCOMException E)
{
//DoSomethingWith --> E.Message.ToString();
}
}
我使用System.DirectoryServices.AccountManagement
:中的类解决了这个问题
using (var ctx = new PrincipalContext(
ContextType.Domain,
host,
rootDn,
ContextOptions.ServerBind | ContextOptions.Negotiate | ContextOptions.SecureSocketLayer,
username,
password))
using (var user = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, objectGuid.ToString()))
{
if (user != null)
{
user.UnlockAccount();
}
else
{
// user not found
}
}
但我仍然不知道UnlockAccount
方法比将lockOutTime
设置为零(或清除它)做得更多。