C# 以另一个用户身份访问 Active Directory

我想就以下问题寻求您的帮助。我正在开发临时应用程序,仅由我使用一次。


其中一部分是为 AD 中的 3000 多个用户执行密码重置并向他们发送新凭据。


我可以以普通用户的身份从 AD 读取,但我必须使用特权帐户来修改它。我怎样才能做到这一点?我知道,我可以使用 PowerShell 并在几秒钟内完成它,但我想学习如何在 C# 中完成它。


我搜索用户的代码很简单


public class ADSecurity

{

    public static string getUserName(string sam)

    {

        PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, sam);

        return user.Name;

    }

}

我怎么能做同样的事情,但作为不同的用户?


我看过一些指南,但都没有解释 az ... 只是关于如何模仿的建议,但没有关于如何使用它的建议。这里有一篇关于模拟的文章,但使用的是 LDAP 协议 ( DirectoryEntry)。但据我了解,它真的很慢。


任何建议表示赞赏。我需要从现在开始 2 天后运行它,所以在最坏的情况下,我使用 PowerShell 来完成它。


慕桂英4014372
浏览 116回答 1
1回答

米琪卡哇伊

有几种方法可以做到:在所需凭据下运行您的应用程序(Shift+右键单击 .exe 文件并使用“以其他用户身份运行”)。如果你只做一次,这是最简单的。使用接受用户名和密码的PrincipalContext构造函数。public class ADSecurity{    public static string getUserName(string sam)    {        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, username, password);        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, sam);        return user.Name;    }}使用接受用户名和密码的DirectoryEntry构造函数。我不确定你说的哪个例子“慢”,但根据我的经验,DirectoryEntry只要你正确使用它,直接使用几乎总是更快。无论如何,System.DirectoryServices.AccountManagement命名空间(您在示例中使用的)DirectoryEntry在幕后使用。当然,选项 2 和 3 要求您知道密码。
打开App,查看更多内容
随时随地看视频慕课网APP