引用 http://www.cnblogs.com/skynothing/archive/2010/07/26/1785344.html
这几天使用C#操作windows帐户相当纠结,以前没做过,google翻阅了不少资料,尝试不少方法,终于解决了我的问题。
1.创建windows帐户
view sourceprint?01 /// <summary>
02 /// 创建Windows帐户
03 /// </summary>
04 /// <param name="pathname"></param>
05 /// <returns></returns>
06 public static void CreateLocalUser(string username, string password, string description)
07 {
08 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
09 var newUser = localMachine.Children.Add(username, "user");
10 newUser.Invoke("SetPassword", new object[] { password });
11 newUser.Invoke("Put", new object[] { "Description", description });
12 newUser.CommitChanges();
13 localMachine.Close();
14 newUser.Close();
15 }
2.更改Windows帐户密码
view sourceprint?01 /// <summary>
02 /// 更改Windows帐户密码
03 /// </summary>
04 /// <param name="username"></param>
05 /// <param name="oldPwd"></param>
06 /// <param name="newPwd"></param>
07 public static void ChangeWinUserPasswd(string username, string oldPwd, string newPwd)
08 {
09 DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
10 DirectoryEntry user = localMachine.Children.Find(username, "user");
11 object[] password = new object[] { oldPwd, newPwd };
12 object ret = user.Invoke("ChangePassword", password);
13 user.CommitChanges();
14 localMachine.Close();
15 user.Close();
16 }
3.判断Windows用户是否存在
view sourceprint?01 /// <summary>
02 /// 判断Windows用户是否存在
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool ExistWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 var user = localMachine.Children.Find(username, "user");
13 return user != null;
14 }
15 }
16 catch
17 {
18 return false;
19 }
20 }
4.删除Windows用户view sourceprint?01 /// <summary>
02 /// 删除Windows用户
03 /// </summary>
04 /// <param name="username"></param>
05 /// <returns></returns>
06 public static bool DeleteWinUser(string username)
07 {
08 try
09 {
10 using (DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
11 {
12 //删除存在用户
13 var delUser = localMachine.Children.Find(username, "user");
14 if (delUser != null)
15 {
16 localMachine.Children.Remove(delUser);
17 }
18 }
19 return true;
20 }
21 catch
22 {
23 return false;
24 }
25 }
5.启用/禁用windows帐户
view sourceprint?01 /// <summary>
02 /// 启用/禁用windows帐户
03 /// </summary>
04 /// <param name="username"></param>
05 public static void Disable(string username, bool isDisable)
06 {
07 var userDn = "WinNT://" + Environment.MachineName + "/" + username + ",user";
08 DirectoryEntry user = new DirectoryEntry(userDn);
09 user.InvokeSet("AccountDisabled", isDisable);
10 user.CommitChanges();
11 user.Close();
12 }
操作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
分享到:
相关推荐
在C#代码中,我们通常会使用`DirectoryEntry`对象来代表AD的对象,如域、用户或组,而`DirectorySearcher`则用于搜索AD中的对象。 要获取域所有信息,首先需要创建一个`DirectoryEntry`实例,指定AD的根目录,例如`...
域操作类是.NET开发人员处理活动目录(Active Directory)时经常会用到的一种工具,它提供了对域用户、组、计算机等对象的管理功能。本文将详细介绍".net c#域操作工具类"的相关知识点。 首先,了解什么是域。在...
在Windows系统中,我们可以使用`DirectoryEntry`类来实现这一功能,该类是.NET Framework中的System.DirectoryServices命名空间的一部分,允许我们与活动目录(Active Directory)或本地机器的SAM(安全账户管理器)...
这通常涉及到使用DirectoryEntry和DirectorySearcher类来执行搜索操作。 2. **域结构探索**:该工具可以帮助开发者或管理员查看和理解域的层次结构,包括组织单元(OU)、域控制器、用户组等。这可能涉及到递归遍历...
通过本文档的学习,您应该对如何使用C#中的`System.DirectoryServices`命名空间进行Windows域的操作有了较为全面的理解。无论是创建新用户、修改现有用户信息还是查询用户信息,都能够得心应手。当然,在实际应用中...
在C#编程中,我们可以利用System.DirectoryServices命名空间中的DirectoryEntry和DirectorySearcher类来管理Windows用户和用户组。这些类是通过活动目录服务接口(ADSI)与Windows操作系统进行交互,实现对本地用户...
总的来说,使用C#与AD域进行交互是通过System.DirectoryServices命名空间的类实现的,包括DirectoryEntry、DirectorySearcher等,可以方便地读取组织结构和用户信息。实际开发时,需要根据具体需求调整代码,如搜索...
例如,可以使用`DirectoryEntry`类来创建一个指向`WinNT://.`的引用,从而访问本地计算机的用户账户。 3. **`System.Security.Principal`命名空间**:这个命名空间包含了处理Windows安全主体(如用户、组)的类。...
本篇文章将详细介绍如何使用C#语言实现Windows用户及其权限的自动化管理。 #### 一、创建Windows用户 在C#中,可以利用`System.DirectoryServices`命名空间中的类来实现对Windows用户的创建。具体实现步骤如下: ...
在C#中,我们可以通过DirectoryEntry对象来访问和操作Windows用户账户、组和其他AD对象。它允许开发者查询、修改和创建AD对象,如执行账号查询和密码修改。 2. **账号查询**:在项目中,实现了查询Windows账户的...
5. 使用Registry类和RegistryKey类操作Windows注册表,存储查询到的信息。 注意:在实际操作中,务必处理可能的异常,并确保拥有足够的权限进行AD查询和修改注册表。在生产环境中,这些操作应遵循安全最佳实践,...
C#提供了一套名为System.DirectoryServices的命名空间,该命名空间包含了处理AD操作所需的类和方法,如DirectoryEntry和DirectorySearcher。 **1. 使用DirectoryEntry进行连接:** DirectoryEntry对象代表AD中的一...
在IT行业中,Active Directory(AD)域是一种身份验证和授权服务,广泛应用于Windows网络环境,用于管理和控制用户、计算机和其他网络资源。C#作为.NET框架的主要编程语言,提供了丰富的类库来与AD域进行交互。本篇...
2. **引用AD操作类**: 在C#中,操作AD主要使用`System.DirectoryServices`命名空间下的类,例如`DirectoryEntry`和`DirectorySearcher`。首先需要在项目中引入这个命名空间。 3. **连接AD**: 连接到AD服务器的...
本篇文章将深入探讨如何使用C#进行Active Directory操作,以及通过提供的源码来理解和学习相关技术。 首先,我们要了解C#与AD交互的基本概念。C#通过System.DirectoryServices命名空间中的类来访问和管理AD。主要...
在实际应用中,可能还需要处理权限问题,比如使用匿名连接或指定管理员账户。此外,为了优化性能,可以设置DirectorySearcher的PropertiesToLoad集合,只加载需要的属性,减少数据传输量。 总的来说,通过C#和...
这通常涉及到使用System.DirectoryServices和System.DirectoryServices.AccountManagement命名空间中的类,如DirectoryEntry和DirectorySearcher,它们允许我们以编程方式操作Active Directory服务,包括管理IIS站点...
4. **LDAPSearch**:在C#.NET中,进行LDAP搜索通常涉及使用System.DirectoryServices命名空间中的类,如`DirectoryEntry`和`DirectorySearcher`。`DirectoryEntry`用于连接到LDAP服务器,而`DirectorySearcher`则...
总的来说,C#.NET中的域用户验证涉及到对Windows域的理解、DirectoryServices命名空间的使用,以及安全性最佳实践的遵循。在实际开发中,不仅要确保代码功能的正确性,还要关注性能和安全性,以保护系统的整体安全。
在C#编程中,对Windows用户和组进行操作是常见的任务,这主要涉及到系统管理和权限控制。本实例展示了如何使用C#的`System.DirectoryServices`命名空间中的类来实现这些功能。下面我们将详细讨论以下几个方面: 1. ...