为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕桂英4014372 2022-06-12 10:33:49
我想就以下问题寻求您的帮助。我正在开发临时应用程序,仅由我使用一次。其中一部分是为 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 来完成它。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

有几种方法可以做到:


在所需凭据下运行您的应用程序(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 要求您知道密码。


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信