C#使用DirectoryEntry类操作Windows帐户

1.创建windows帐户


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/// <summary>

/// 创建Windows帐户

/// </summary>

/// <param name="pathname"></param>

/// <returns></returns>

public static void CreateLocalUser(string username, string password, string description)

{

    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");

    var newUser = localMachine.Children.Add(username, "user");

    newUser.Invoke("SetPassword", new object[] { password });

    newUser.Invoke("Put", new object[] { "Description", description });

    newUser.CommitChanges();

    localMachine.Close();

    newUser.Close();

}

2.更改Windows帐户密码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/// <summary>

/// 更改Windows帐户密码

/// </summary>

/// <param name="username"></param>

/// <param name="oldPwd"></param>

/// <param name="newPwd"></param>

public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)

{

    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");

    DirectoryEntry user = localMachine.Children.Find(username, "user");

    object[] password = new object[] { oldPwd, newPwd };

    object ret = user.Invoke("ChangePassword", password);

    user.CommitChanges();

    localMachine.Close();

    user.Close();

}

3.判断Windows用户是否存在


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/// <summary>

/// 判断Windows用户是否存在

/// </summary>

/// <param name="username"></param>

/// <returns></returns>

public static bool ExistWinUser(string username)

{

    try

    {

        using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))

        {

            var user = localMachine.Children.Find(username, "user");

            return user != null;

        }

    }

    catch

    {

        return false;

    }

}

4.删除Windows用户


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

/// <summary>

/// 删除Windows用户

/// </summary>

/// <param name="username"></param>

/// <returns></returns>

public static bool DeleteWinUser(string username)

{

    try

    {

        using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))

        {

            //删除存在用户

            var delUser = localMachine.Children.Find(username, "user");

            if (delUser != null)

            {

                localMachine.Children.Remove(delUser);

            }

        }

        return true;

    }

    catch

    {

        return false;

    }

}

5.启用/禁用windows帐户


1

2

3

4

5

6

7

8

9

10

11

12

/// <summary>

/// 启用/禁用windows帐户

/// </summary>

/// <param name="username"></param>

public static void Disable(string username, bool isDisable)

{

    var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user";

    DirectoryEntry user = new DirectoryEntry(userDn);

    user.InvokeSet("AccountDisabled", isDisable);

    user.CommitChanges();

    user.Close();

}

  操作windows帐户的方法的诀窍在于通过DirectoryEntry 实例调用Invoke,InvokeGet,InvokeSet这三个方法。此三个方法可以对对本机 Active Directory 对象调用方法。操作win帐户的Active Directory 对象就是IADsUser接口。DirectoryEntry 实例通过调用Invoke方法调用IADsUser接口的方法,如上面修改Windows帐户密码就是通过调用IADsUser接口的“ChangePassword”方法;通过InvokeGet和InvokeSet方法调用IADsUser接口的属性,如上面的启用/禁用windows帐户,调用IADsUser接口的“AccountDisabled”属性。IADsUser接口具体有什么方法和属性可参考:http://msdn.microsoft.com/zh-cn/library/aa746340(v=VS.85).aspx

时间: 2024-10-05 21:58:08

C#使用DirectoryEntry类操作Windows帐户的相关文章

Windows帐户类型

摘自:http://blog.csdn.net/shineorrain/article/details/18181707 LocalSystem   账户  LocalSystem是预设的拥有本机所有权限的本地账户,这个账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证.这个服务账户可以打开注册表的HKEY_LOCAL_MACHINE\Security键,当LocalSystem访问网络资源时,它是作为计算机的域账户使用的. 举例来说,以LocalSystem账户运行的服务主要有:W

AD帐户操作C#示例代码(一)——导入用户信息

最近写了一个AD帐户导入的小工具(为啥写作“帐”户呢?),跟大家分享下相关代码,欢迎各位高手指教! 首先,我准备一个这样的Excel文件作为导入模版,并添加了一些测试数据. 然后,我打开Visual Studio 2012,新建一个Windows窗体应用程序.在主窗体界面,我放了一些Label.TextBox.Button控件,还有一个ProgressBar. 开始写代码.首先写从Excel里读取数据的方法. private static async Task<DataTable> GetTa

AD帐户操作C#示例代码(二)——检查密码将过期的用户

本文接着和大家分享AD帐户操作,这次开发一个简单的检查密码将过期用户的小工具. 首先,新建一个用户实体类,属性是我们要取的用户信息. public class UserInfo { /// <summary> /// sAM帐户名称 /// </summary> public string SamAccountName { get; set; } /// <summary> /// 名称 /// </summary> public string Name {

Windows域帐户与域控制器的优点介绍

域帐户可以在任意一台已经加入域的电脑上登录. 将域用户组加入到SQL Server登录里,域用户组内所有人员便都可以使用域用户登录数据库,继承相关权限. 域用户登录Team Foundation Server.SharePoint等都不用输入用户名密码,可自动识别. 域用户密码是放在服务器上的,可以集中设置权限策略,不易被破解,比放在本地更安全. AD,可以查到所有人所在部门.职位.手机.分机等. 可以对域用户及域用户组设置邮箱,对组发邮件会发给组内所有人员. 一次次震撼的结果就是:我想研究下他

Windows - 本地帐户获得管理员权限

Win键+R,输入 gpedit.msc 计算机配置-->Windows 设置-->安全设置-->-本地策略->-->安全选项-->帐户:管理员帐户状态 右键 帐户:管理员帐户状态-->属性-->选择 已启用

用户“*****”不具有所需的权限。请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题。

错误: 用户“ts\***”不具有所需的权限.请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题. 解决: 当从客户端用IE连接http://xxx.xxx.xxx.xxx/Reports/Pages/Folder.aspx 访问报表管理器时,出现上面错误,则必须在"主文件设置"里,添加相关用户以及对应的权限.如下所示:

浅谈Windows用户帐户控制(User Account Control,UAC)

Microsoft一个事实:大多数用户都用一个Administrator(管理员)帐户来登录Windows.利用这个帐户,用户几乎没有任何限制地访问重要的系统资源,因为该帐户被授予很高的权限.一旦用户这样的一个特权帐户来登录Vista之前的某个Windows操作系统,就会创建一个安全令牌(security token).每当有代码试图访问一个受保护的安全资源时,操作系统就会使用(出示)这个安全令牌.这个令牌会与新建的所有进程关联.第一个进程就是Windows资源管理前,后者随即将令牌拿给它的所有

在Windows 7和10上显示上次登录帐户信息

组策略: 计算机配置->管理模板->Windows组件->Windows登录选项 现在注销并重新登录以查看会发生什么. 在进入桌面之前,用户必须确认该消息 注册表: 打开: "计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" 创建一个DWORD(32-bit)类型名称为 DisplayLastLongonInfo 设置值为1 应用: 它对于至少Window

电子邮件系统帐户集成

.NET ERP系统 电子邮件系统帐户集成 为保证ERP系统的信息流准确快速的传递,需要给系统设计一个消息盒子机制.当系统中发生业务操作后,需要提醒下一个环节的操作人员,以保证ERP信息流快速准确传递.比如生产任务单(工作单,加工单,制单)过帐完成后,需要通知仓库准备材料供车间领料生产.消息盒子的界面大致如下所示: 消息盒子包含业务通知(Messages)和工作流审批(Workflow).业务通知比如采购人员下达采购订单PO后,需要通知仓库人员准备收货.工作流审批是以审批为基础的单据流程控制.