使用目录服务和 Visual C sharp 将用户添加到本地系统

本文介绍如何使用 DirectoryServices 命名空间将用户添加到本地系统和 Visual C# 中的组。

原始产品版本: Visual C#
原始 KB 编号: 306273

摘要

本分步文章介绍如何使用 DirectoryServices 命名空间将用户添加到本地系统和组。

创建示例

  1. 启动 Visual Studio .NET 2003、Visual Studio 2005 或 Visual Studio 2008,然后创建新的 Visual C# 控制台应用程序项目。

  2. 在解决方案资源管理器中,右键单击“引用”,然后单击“添加引用”

  3. 添加对程序集的 System.DirectoryServices.dll 引用。

  4. Class1.cs 文件中的代码替换为以下代码。

    注意

    在 Visual C# 2005 或 Visual C# 2008 中, Class1.cs 文件将替换为 Program.cs 文件。

    using System;
    using System.DirectoryServices;
    
    class Class1
    {
        static void Main(string[] args)
        {
            try
            {
                DirectoryEntry AD = new DirectoryEntry("WinNT://" +
                Environment.MachineName + ",computer");
                DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");
                NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
                NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
                NewUser.CommitChanges();
                DirectoryEntry grp;
    
                grp = AD.Children.Find("Guests", "group");
                if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}
                Console.WriteLine("Account Created Successfully");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
    }
    
  5. 编译并运行项目。

  6. 在基于 Windows 2000 的计算机上执行以下步骤,验证帐户是否已创建并添加到来宾组:

    1. “开始 ”菜单中,指向 “程序”,指向 “管理工具”,然后单击“ 计算机管理”。
    2. 单击此项可展开“ 本地用户和组” 节点。 新帐户应显示在“用户”节点下,以及“来宾”组的节点下。

    在基于 Windows XP 的计算机上执行以下步骤,验证帐户是否已创建并添加到来宾组:

    1. “开始”菜单中,单击“控制面板”。
    2. 双击“ 用户帐户”。 新的用户帐户应显示在“ 用户帐户 ”对话框中。

    重要

    完成测试后,从系统中删除新创建的用户帐户。

创建新的目录条目

在此示例中创建目录条目时,假定系统正在运行Windows NT、Windows 2000 或 Windows XP。

注意

传递给构造函数的 DirectoryEntry 字符串以 "WinNT://"开头。 还可以在其他第三方操作系统上运行目录服务。

DirectoryEntry AD = new DirectoryEntry("WinNT://" + SystemInformation.ComputerName + ",computer");

将目录项添加到目录树

以下代码向 Active Directory 树添加 DirectoryEntry 值为 的 TestUser1 类型用户。

DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");

设置新用户帐户的密码和说明

以下代码调用 Invoke 方法以调用 SetPassword 对象的 和 Put 方法 DirectoryEntry 。 这会设置密码并将说明分配给用户帐户。 此代码还调用 CommitChanges 方法来保存更改。

NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
NewUser.CommitChanges();

将帐户添加到组

若要将帐户添加到组,请执行以下步骤:

  1. 定义 类型的 DirectoryEntry变量。
  2. Find调用 类成员的 ActiveDirectory 方法Children以填充变量。 在这种情况下,来宾组是搜索的目标。 此代码测试方法返回的值 Find ,以确定是否已找到组。 如果找到该组,则会将新用户帐户添加到该组。
DirectoryEntry grp;
grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}

疑难解答

如果尝试在没有创建用户帐户的足够权限的情况下运行代码,则本文中的代码将失败。 若要成功完成代码,当前登录的用户必须是 Administrators 组的成员或具有允许用户创建用户帐户的特定权限。