ディレクトリ サービスと Visual C# を使用してローカル システムにユーザーを追加する方法

Microsoft Visual Basic .NET については、次の資料を参照してください。306271

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.DirectoryServices

この資料の内容

概要

この資料では、DirectoryServices 名前空間を使用して、ユーザーをローカル システムやグループに追加する方法について手順を追って説明します。


必要条件

  • Microsoft Windows XP、Windows 2000、または Windows NT 4.0
  • Visual C# .NET または Visual C# 2005

サンプルの作成

  1. Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 を起動し、Visual C# のコンソール アプリケーション プロジェクトを新規作成します。
  2. ソリューション エクスプローラで、[参照設定] を右クリックし、[参照の追加] をクリックします。
  3. System.DirectoryServices.dll アセンブリへの参照を追加します。
  4. Class1.cs のコードを次のコードで置き換えます。


    : Microsoft Visual C# 2005 では、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 ベースのコンピュータでは、以下の手順に従って、アカウントが作成され、Guest グループに追加されたことを確認します。
    1. [スタート] ボタンをクリックし、[プログラム]、[管理ツール] を順にポイントし、[コンピュータの管理] をクリックします。
    2. [ローカル ユーザーとグループ] をクリックして、展開します。新しいアカウントが [ユーザー] ノードに表示され、同様に、[Guests] グループのノードにも表示されます。
    Windows XP ベースのコンピュータでは、以下の手順に従って、アカウントが作成され、Guest グループに追加されたことを確認します。
    1. [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。
    2. [ユーザー アカウント] をクリックします。新しいユーザー アカウントが [ユーザー アカウント] ダイアログ ボックスに表示されます。
    注意事項 : テストが終わったら、新しく作成したユーザー アカウントはシステムから削除してください。

コードの説明

新しいディレクトリ エントリの作成

このサンプルでは、ディレクトリ エントリを作成するときに、システムが Microsoft Windows NT、Windows 2000、または Windows XP を実行していると想定しています。DirectoryEntry コンストラクタに渡す文字列が "WinNT://" で始まっていることに注意してください。ディレクトリ サービスは、別のサードパーティのオペレーティング システムでも実行できます。

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

ディレクトリ ツリーへのディレクトリ エントリの追加

次のコードは、TestUser1 値を持つ user 型の DirectoryEntry を Active Directory ツリーに追加します。

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

新しいユーザー アカウントのパスワードと説明の設定

次のコードは、Invoke メソッドを呼び出して、DirectoryEntry オブジェクトの SetPassword メソッドと Put メソッドを呼び出します。これにより、ユーザー アカウントにパスワードを設定し、説明を割り当てます。また、このコードは CommitChanges メソッドを呼び出して、変更を保存しています。

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

グループへのアカウントの追加

グループにアカウントを追加するには、以下の手順を実行します。
  1. DirectoryEntry 型の変数を定義します。
  2. ActiveDirectory クラスの Children メンバの Find メソッドを呼び出して、変数に値を読み込みます。この場合は、Guest グループが検索の対象になります。このコードは、Find メソッドが返す値をテストして、グループが見つかったかどうかを判別します。グループが見つかった場合、新しいユーザー アカウントがそのグループに追加されます。
DirectoryEntry grp;
grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}

トラブルシューティング

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


プロパティ

文書番号:306273 - 最終更新日: 2006/10/03 - リビジョン: 1

フィードバック