[DirectoryEntry][Tips] 指定したOUにユーザーを作成する 


DirectoryEntryコンポーネントを使用すると、指定したOUにユーザーを作成することができます。

下記に手順を示します。

  1. DirectoryEntryのPathプロパティにパスを設定します。
  2. DirectoryEntryのChildrenプロパティが持つFindメソッドを使用してOUを検索し、DirectoryEntry型の変数(仮にouとする)に代入しておきます。
  3. OUが見つかったら、変数ouのChildrenプロパティのAddメソッドでユーザーを指定し、DirectoryEntry型の変数(仮にuserとする)に代入します。
  4. 変数userのPropertiesプロパティを使用して”samAccountName”にユーザーを設定します。
  5. 変数userのCommitChangesメソッドを実行して、ユーザーを作成します。

下記は、指定したOUにユーザーを作成する例です。

VBの例

' [ユーザーの作成]ボタンクリック時の処理
Private Sub btnCreateUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreateUser.Click
    'LDAPパスを指定
    DirectoryEntry1.Path = "LDAP://corp.contoso.com"

    '★★★指定されたOUの検索★★★
    Dim ou As System.DirectoryServices.DirectoryEntry = DirectoryEntry1.Children.Find("OU=" & txtOU.Text)

    '★★★指定したOUにユーザーを作成する★★★
    Dim user As System.DirectoryServices.DirectoryEntry = ou.Children.Add("CN=" & txtUser.Text, "user")
    user.Properties("samAccountName").Value = txtUser.Text

    user.CommitChanges()
End Sub

C#の例

// [ユーザーの作成]ボタンクリック時の処理
private void btnCreateUser_Click(object sender, EventArgs e)
{
    // LDAPパスを指定
    directoryEntry1.Path = "LDAP://corp.contoso.com";

    // ★★★指定されたOUの検索★★★
    System.DirectoryServices.DirectoryEntry ou = directoryEntry1.Children.Find("OU=" + txtOU.Text);

    // ★★★指定したOUにユーザーを作成する★★★
    System.DirectoryServices.DirectoryEntry user = ou.Children.Add("CN=" + txtUser.Text, "user");
    user.Properties["samAccountName"].Value = txtUser.Text;

    user.CommitChanges();
}

[DirectoryEntry][Tips] Propertiesプロパティに指定可能な値を取得する


前回の記事では、Propertiesプロパティに”FullName”を指定して、ログオン名からフルネームを取得する例を紹介しました。

では、Propertiesプロパティには、どのような値を指定することが可能なのでしょうか?

Propertiesプロパティに指定可能な値は、Propertiesプロパティが持つ、PropertyNamesプロパティを参照することで取得することが可能です。

DirectoryEntryコンポーネントにパスを設定した後、For Each(C#ならforeach)で、PropertyNamesを取り出します。

下記は、Propertiesプロパティに指定可能な値を取得する例です。

Path欄にWinNTプロバイダパスやLDAPパスを指定し、[Propertiesプロパティに指定可能な値]ボタンをクリックすると、指定可能な値の一覧が表示されます。

VBの例

' [Propertiesプロパティに指定可能な値を取得]ボタンクリック時の処理
Private Sub btnGetPropertiesValue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetPropertiesValue.Click       
    'DirectoryEntryコントロールのPathプロパティにパスを設定
    DirectoryEntry1.Path = txtPath.Text

    'リストボックスの初期化
    ListBox1.Items.Clear()

    '★★★Propertiesプロパティ指定可能な値を取得★★★
    For Each p In DirectoryEntry1.Properties.PropertyNames
        ListBox1.Items.Add(p.ToString())
    Next
End Sub

C#の例

// [Propertiesプロパティに指定可能な値を取得]ボタンクリック時の処理
private void btnGetPropertiesValue_Click(object sender, EventArgs e)
{
    // DirectoryEntryコントロールのPathプロパティにパスを設定
    directoryEntry1.Path = txtPath.Text;

    // リストボックスの初期化
    listBox1.Items.Clear();

    // ★★★Propertiesプロパティ指定可能な値を取得★★★
    foreach (var p in directoryEntry1.Properties.PropertyNames)
        listBox1.Items.Add(p.ToString());        
}

[DirectoryEntry][Tips] ログオン名からフルネームを取得する


DirectoryEntryコンポーネントを使用すると、ActiveDirectoryドメインサービス階層のノードやオブジェクトの操作を行うことができます。

今回は、ログオン名からフルネームを取得する例を紹介します。

この例では、Visual Studioのツールボックスのコンポーネント欄にあるDirectoryEntryコンポーネントを使用しています(DirectoryEntryクラスを使用しても同様の結果を得ることができます)。

ログオン名からフルネームを取得するには、最初にパス文字列を準備する必要があります。

WinNTプロバイダを使用する、”WinNT://ドメイン名/ログオン名”という文字列を作成し、DirectoryEntryのPathプロパティに設定します。

あとはフルネームを取得するだけとなります。DirectoryEntryのPropertiesプロパティに取得するオブジェクト名を指定することで、データを取得することができます。

たとえばフルネームは”FullName”という文字列を指定すれば取得することができるので、下記のようなコードを記述します。

VBの例

DirectoryEntry1.Properties("FullName").Value.ToString()

C#の例

directoryEntry1.Properties["FullName"].Value.ToString();

上記を踏まえて作成した、ログオン名からフルネームを取得する例は下記の通りです。

テキストボックスに入力されたドメイン名とログオン名からパスを作成し、フルネームを取得して表示します。

VBの例

' [フルネームの取得]ボタンクリック時の処理
Private Sub btnGetFullName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetFullName.Click
    'パス文字列を作成する
    Dim path As String = "WinNT://" & txtDomain.Text + "/" & txtLogonName.Text

    'DirectoryEntryコントロールのPathプロパティにパスを設定
    DirectoryEntry1.Path = path

    '★★★フルネームを取得して表示する★★★
    txtFullName.Text = DirectoryEntry1.Properties("FullName").Value.ToString()
End Sub

C#の例

// [フルネームの取得]ボタンクリック時の処理
private void btnGetFullName_Click(object sender, EventArgs e)
{
    // パス文字列を作成する
    string path = "WinNT://" + txtDomain.Text + "/" + txtLogonName.Text;

    // DirectoryEntryコントロールのPathプロパティにパスを設定
    directoryEntry1.Path = path;

    // ★★★フルネームを取得して表示する★★★
    txtFullName.Text = directoryEntry1.Properties["FullName"].Value.ToString();
}