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

本文介绍如何使用 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");

将目录条目添加到目录树

以下代码将一个 DirectoryEntry 类型用户 TestUser1 的值添加到 Active Directory 树中。

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()});}

故障排除

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