不计费服务器: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解锁帐户时,一切都很好。

该错误也发生在不同的用户对象中,但两个版本(ClearInvokeSet)都适用于其他环境。有人能给我一个提示吗?

附言:我使用域管理员凭据访问LDAP服务器。

不计费服务器:Can';t解锁代码中的AD帐户

试试这个例子:

   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设置为零(或清除它)做得更多。