DirectoryEntry是.NET Framework提供的一个类库,用于对Active Directory进行操作。借助DirectoryEntry,我们可以创建、删除、修改活动目录实体,如用户、组、计算机等。其中,用户账户的启用和停用、账户的创建是DirectoryEntry中比较常见和基础的操作。本文将分别对这些功能进行详细的介绍,并给出相应代码示例。
一、启用与停用账户
在Active Directory中,禁用了的账户无法登录系统,因此在管理员进行用户管理时,有时需要对用户账户进行禁用或启用操作。通过DirectoryEntry可以很方便地实现这个功能。
以禁用一个账户为例,具体步骤如下:
1. 根据账户名称找到目标账户
```csharp
DirectoryEntry targetUser = new DirectoryEntry("LDAP://" + domainName + "/" + userName);
```
其中,domainName为该用户所处的域名,userName为该用户的名称。
2. 修改用户的用户账户控制属性
```csharp
int userAccountControl = (int)targetUser.Properties["userAccountControl"].Value;
targetUser.Properties["userAccountControl"].Value = userAccountControl | UserAccountControl.DISABLE_ACCOUNT;
targetUser.CommitChanges();
```
在这里,我们使用了UserAccountControl常量。其中,DISABLE_ACCOUNT代表禁用账户。
这样,我们就完成了禁用账户的操作。要启用账户,只需将DISABLE_ACCOUNT改为NORMAL_ACCOUNT即可。
二、创建账户
在Active Directory中创建一个用户账户,需要指定账户的名称、密码和分配给该账户的组等信息。以下是一个创建账户的范例:
```csharp
// 创建DirectoryEntry实例,指定创建对象的目录位置和命名上下文
DirectoryEntry userEntry = new DirectoryEntry("LDAP://" + domainName + "/" + "CN=Users,DC=" + domainName.Split('.')[0] + ",DC=com", serviceAccount, password, AuthenticationTypes.Secure);
// 创建一个新用户账户
DirectoryEntry newUser = userEntry.Children.Add("CN=" + userName, "user");
// 设置该用户的属性
newUser.Properties["samAccountName"].Value = userName;
newUser.Properties["displayName"].Value = userName;
newUser.Properties["userPrincipalName"].Value = userName + "@" + domainName;
newUser.Properties["userAccountControl"].Value = UserAccountControl.NORMAL_ACCOUNT;
newUser.CommitChanges();
// 设置该用户的密码
newUser.Invoke("SetPassword", new object[] { password });
newUser.CommitChanges();
```
在这里,我们首先创建了一个指定目录位置的DirectoryEntry,用于创建用户账户。在创建新用户之前,我们还需要创建一个用户对象,用于指定该用户所在的组和容器。
最后,为了能够登录该账户,我们需要将该账户的密码设置为指定值,这需要新用户对象调用"SetPassword"方法实现。
三、DirectoryEntry用法小结
除了启用/禁用和创建账户外,我们还可以使用DirectoryEntry进行其他操作,如修改用户信息、删除用户等。下面是在DirectoryEntry中常用的操作:
1. 修改用户信息
```csharp
targetUser.Properties["displayName"].Value = "newDisplayname";
targetUser.CommitChanges();
```
2. 删除用户账户
```csharp
DirectoryEntry targetUser = new DirectoryEntry("LDAP://" + domainName + "/" + userName);
targetUser.DeleteTree();
```
在实际使用中,我们可以根据需要进行选用。需要注意的是,对于目录中的实体对象修改,都需要通过CommitChanges方法才能生效。
四、案例说明
现假设我们需要进行如下操作:
1. 创建一个名为"testUser"的用户账户
2. 为该账户设置密码
3. 修改该账户的显示名称
4. 禁用该账户
根据上述步骤,我们可以编写如下代码实现:
```csharp
string domainName = "mydomain.com";
string password = "password123";
string userName = "testUser";
// 创建DirectoryEntry实例,指定创建对象的目录位置和命名上下文
DirectoryEntry userEntry = new DirectoryEntry("LDAP://" + domainName + "/" + "CN=Users,DC=" + domainName.Split('.')[0] + ",DC=com", "myadmin@mydomain.com", "password123", AuthenticationTypes.Secure);
// 创建一个新用户账户
DirectoryEntry newUser = userEntry.Children.Add("CN=" + userName, "user");
// 设置该用户的属性
newUser.Properties["samAccountName"].Value = userName;
newUser.Properties["displayName"].Value = userName;
newUser.Properties["userPrincipalName"].Value = userName + "@" + domainName;
newUser.Properties["userAccountControl"].Value = UserAccountControl.NORMAL_ACCOUNT;
newUser.CommitChanges();
// 设置该用户的密码
newUser.Invoke("SetPassword", new object[] { password });
newUser.CommitChanges();
// 修改该用户的显示名称
newUser.Properties["displayName"].Value = "new" + userName;
newUser.CommitChanges();
// 禁用该用户
int userAccountControl = (int)newUser.Properties["userAccountControl"].Value;
newUser.Properties["userAccountControl"].Value = userAccountControl | UserAccountControl.DISABLE_ACCOUNT;
newUser.CommitChanges();
```
在完成上述操作后,我们可以在Active Directory中查看到新创建的账户,并验证账户已禁用、密码已设置并且显示名称已被修改。
综上,DirectoryEntry是一个非常实用的Active Directory操作类,它提供了丰富的方法和属性,可以让我们在.NET开发中更方便地管理用户账户等。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复