ディレクトリ サービスと 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://"始まります。 他のサード パーティのオペレーティング システムで Directory Services を実行することもできます。

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

ディレクトリ ツリーにディレクトリ エントリを追加する

次のコードでは、 の値TestUser1DirectoryEntry持つユーザー型を 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メンバーの メソッドをChildrenActiveDirectory呼び出して、変数を設定します。 この場合、ゲスト グループが検索のターゲットになります。 このコードは、メソッドが返す値を Find テストして、グループが見つかったかどうかを判断します。 グループが見つかった場合、新しいユーザー アカウントがグループに追加されます。
DirectoryEntry grp;
grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}

トラブルシューティング

この記事のコードは、ユーザー アカウントを作成するための十分な特権なしでコードを実行しようとすると失敗します。 コードが正常に完了するには、現在ログオンしているユーザーが Administrators グループのメンバーであるか、ユーザーがユーザー アカウントを作成できるようにする特定のアクセス許可を持っている必要があります。