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

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/

点赞(31) 打赏

评论列表 共有 0 条评论

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