DirectoryEntry 账户启动与停用 以及创建账户等

DirectoryEntry是在.NET Framework中提供的一个类,用于访问和管理Active Directory中的对象。其中包括用户、计算机、组、组织单位等。通过使用DirectoryEntry类,可以执行一系列与Active Directory相关的操作,包括创建、修改、删除和搜索对象。在这篇文章中,我们将着重讨论DirectoryEntry的三个方面:启用和停用账户、创建用户账户以及实际操作示例。

1. 启用和停用账户

在Active Directory中,账户的启用和停用可以通过设置对象的userAccountControl属性来完成。其中,userAccountControl属性是一个32位二进制数,包含了许多有关账户的信息。其中第二位是用于表示账户是否启用的。当设置该位为0时,该账户将被停用;设置为1时,则启用账户。以下是一个设置userAccountControl属性的示例代码:

```

DirectoryEntry user = new DirectoryEntry("LDAP://CN=John Doe,OU=Staff,DC=example,DC=com");

int val = (int)user.Properties["userAccountControl"].Value;

user.Properties["userAccountControl"].Value = val | 0x2; //停用账户

//user.Properties["userAccountControl"].Value = val & ~0x2; //启用账户

user.CommitChanges();

```

上面的示例代码中,首先获取了一个名为“John Doe”的用户的DirectoryEntry对象。然后,获取了该对象的userAccountControl属性的值,并使用逻辑或运算符将其第二位设置为1或0。最后,调用CommitChanges方法更新了该用户对象的属性值。通过设置userAccountControl属性,我们可以方便地启用或停用账户。

除此之外,我们也可以使用AccountManagement命名空间中提供的UserPrincipal类来管理账户的启用和停用。UserPrincipal类封装了DirectoryEntry类,使我们可以通过更简单的方式执行相关操作,如下所示:

```

PrincipalContext context = new PrincipalContext(ContextType.Domain, "example.com");

UserPrincipal user = UserPrincipal.FindByIdentity(context, "John Doe");

user.Enabled = false; //停用账户

//user.Enabled = true; //启用账户

user.Save();

```

其中,我们首先实例化一个PrincipalContext对象,该对象指定了Active Directory的域名。然后,使用UserPrincipal类的FindByIdentity方法获取该账户的对象,并通过设置Enabled属性来启用或停用账户。最终,调用Save方法更新账户对象。

2. 创建用户账户

创建用户账户也是DirectoryEntry类的一项重要功能之一。在此之前,请确保你已经获得了管理员权限。下面是一个创建用户账户的示例代码:

```

DirectoryEntry root = new DirectoryEntry("LDAP://DC=example,DC=com");

DirectoryEntry newUser = root.Children.Add("CN=Jane Doe", "user");

newUser.Properties["userPrincipalName"].Value = "jane.doe@example.com";

newUser.Properties["samAccountName"].Value = "jane.doe";

newUser.CommitChanges();

```

上面的代码首先获取了域的根DirectoryEntry对象,然后通过调用Children的Add方法,创建了一个名为“Jane Doe”的用户对象。指定第二个参数为“user”表示该对象为用户类型。然后,设置了用户的userPrincipalName和samAccountName属性,并通过调用CommitChanges方法将其保存到Active Directory中。值得注意的是,samAccountName必须是独一无二的,因为它将用作用户在域中唯一的标识符。

除此之外,我们也可以使用AccountManagement命名空间中提供的UserPrincipal类来创建用户账户。下面是一个示例代码:

```

PrincipalContext context = new PrincipalContext(ContextType.Domain, "example.com");

UserPrincipal newUser = new UserPrincipal(context);

newUser.Name = "Jane Doe";

newUser.UserPrincipalName = "jane.doe@example.com";

newUser.SetPassword("mypassword"); //设置账户密码

newUser.Enabled = true;

newUser.ExpirePasswordNow();

newUser.Save();

```

首先,我们实例化了一个PrincipalContext对象,并使用它创建了一个新的UserPrincipal对象。然后,设置了新用户的Name和UserPrincipalName属性,并通过调用SetPassword方法设置了账户的密码。最后,启用了该用户账户,并使用ExpirePasswordNow方法强制让用户在下次登录时更改密码。调用Save方法后,该账户将被保存到Active Directory中。

3. 实际操作示例

上面我们已经介绍了一些DirectoryEntry的基本功能。在实际操作过程中,我们可能需要执行更多的操作,如搜索对象、修改对象属性等。下面的示例展示了如何使用DirectoryEntry类实现一个简单的搜索功能:

```

DirectoryEntry root = new DirectoryEntry("LDAP://DC=example,DC=com");

DirectorySearcher searcher = new DirectorySearcher(root);

searcher.Filter = "(&(objectClass=user)(samAccountName=jane.doe))";

SearchResult result = searcher.FindOne();

if (result != null)

{

DirectoryEntry user = result.GetDirectoryEntry();

Console.WriteLine(user.Properties["displayName"].Value);

}

```

上面的示例首先获取了域的根DirectoryEntry对象。然后,创建了一个DirectorySearcher,并设置了过滤器,以搜索名为“jane.doe”的用户对象。最后,调用FindOne方法获取搜索结果,并使用GetDirectoryEntry方法获取了与搜索结果关联的DirectoryEntry对象。通过这个对象我们可以获取或设置用户的属性值。例如上面的代码输出了该用户的displayName属性值。

此外,DirectoryEntry类还提供了一系列的方法和属性,如SetInfo、RefreshCache等,这些方法和属性可以帮助我们更方便地操作Active Directory中的对象。需要注意的是,在使用DirectoryEntry类时,我们需要了解Active Directory的相关知识,以确保我们执行的操作符合最佳实践和安全要求。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(103) 打赏

评论列表 共有 2 条评论

孤影 1年前 回复TA

年年有余、广进财源、丰收在旺、岁岁平安

冰橙♀柠檬 1年前 回复TA

我一生中最幸运的两件事:一件是时间终于将我对你的爱消耗殆尽;一件是很久很久以前有一天,我遇见你。

立即
投稿
发表
评论
返回
顶部