[C#] DirectoryEntryとsAMAccountNameの使い方
C#でDirectoryEntry
とsAMAccountName
を使用する際は、主にActive Directoryにアクセスしてユーザー情報を取得または操作するために用います。
DirectoryEntry
はActive Directoryのオブジェクトを表し、LDAPパスを指定して接続します。
sAMAccountName
はユーザーのログオン名を示す属性で、ユーザーを一意に識別するために使用されます。
例えば、DirectoryEntry
を使って特定のsAMAccountName
を持つユーザーを検索し、そのユーザーの情報を取得することが可能です。
これにより、ユーザーの属性を読み取ったり、更新したりすることができます。
DirectoryEntryの使い方
DirectoryEntryの初期化
DirectoryEntryクラス
は、Active Directoryのオブジェクトを表現するために使用されます。
初期化する際には、LDAPパスを指定する必要があります。
以下は、DirectoryEntry
の初期化のサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://CN=Users,DC=example,DC=com");
}
}
このコードでは、DirectoryEntry
を初期化し、指定したLDAPパスに接続しています。
CN=Users,DC=example,DC=com
は、Active Directory内の特定のコンテナを指します。
LDAPパスの指定方法
LDAPパスは、Active Directory内のオブジェクトを一意に識別するための重要な要素です。
以下の形式で指定します。
LDAP://
:LDAPプロトコルを示すプレフィックスCN=
:共通名(Common Name)OU=
:組織単位(Organizational Unit)DC=
:ドメインコンポーネント(Domain Component)
例えば、次のようなLDAPパスを指定することができます。
LDAPパス例 | 説明 |
---|---|
LDAP://CN=John Doe,OU=Users,DC=example,DC=com | ユーザー John Doe のエントリ |
LDAP://OU=Sales,DC=example,DC=com | Sales 組織単位のエントリ |
認証情報の設定
DirectoryEntry
を使用する際には、必要に応じて認証情報を設定することができます。
以下のサンプルコードでは、ユーザー名とパスワードを指定して認証情報を設定しています。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// 認証情報を設定してDirectoryEntryを初期化
directoryEntry = new DirectoryEntry("LDAP://CN=Users,DC=example,DC=com", "username", "password");
}
}
このコードでは、username
とpassword
を使用して、指定したLDAPパスに接続しています。
これにより、適切な権限を持つユーザーとしてActive Directoryにアクセスすることが可能になります。
sAMAccountNameの利用方法
sAMAccountNameの取得
sAMAccountName
は、Active Directory内のユーザーアカウントを一意に識別するための属性です。
この属性を取得するには、DirectoryEntry
オブジェクトを使用してユーザー情報にアクセスします。
以下は、特定のユーザーのsAMAccountName
を取得するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// sAMAccountNameの取得
string samAccountName = directoryEntry.Properties["sAMAccountName"].Value.ToString();
MessageBox.Show("sAMAccountName: " + samAccountName);
}
}
このコードでは、指定したユーザーのsAMAccountName
を取得し、メッセージボックスで表示しています。
Properties
コレクションを使用して、sAMAccountName
属性にアクセスしています。
sAMAccountNameを用いたユーザー検索
sAMAccountName
を使用して、特定のユーザーをActive Directory内で検索することができます。
以下は、sAMAccountName
を用いてユーザーを検索するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://DC=example,DC=com");
// ユーザー検索
DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
Filter = "(sAMAccountName=jdoe)" // sAMAccountNameでフィルタリング
};
SearchResult result = searcher.FindOne();
if (result != null)
{
MessageBox.Show("ユーザーが見つかりました: " + result.Properties["sAMAccountName"][0]);
}
else
{
MessageBox.Show("ユーザーが見つかりませんでした。");
}
}
}
このコードでは、DirectorySearcher
を使用して、指定したsAMAccountName
を持つユーザーを検索しています。
検索結果が見つかった場合は、そのsAMAccountName
を表示します。
sAMAccountNameの更新
既存のユーザーのsAMAccountName
を更新することも可能です。
以下は、ユーザーのsAMAccountName
を変更するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// sAMAccountNameの更新
directoryEntry.Properties["sAMAccountName"].Value = "newSamAccountName";
directoryEntry.CommitChanges(); // 変更を保存
MessageBox.Show("sAMAccountNameが更新されました。");
}
}
このコードでは、指定したユーザーのsAMAccountName
をnewSamAccountName
に変更し、CommitChangesメソッド
を呼び出して変更を保存しています。
これにより、Active Directory内のユーザー情報が更新されます。
Active Directoryでのユーザー管理
ユーザー情報の取得
Active Directoryからユーザー情報を取得するには、DirectoryEntry
とDirectorySearcher
を使用します。
以下は、特定のユーザーの情報を取得するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://DC=example,DC=com");
// ユーザー情報の取得
DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
Filter = "(sAMAccountName=jdoe)" // sAMAccountNameでフィルタリング
};
SearchResult result = searcher.FindOne();
if (result != null)
{
string userInfo = "ユーザー名: " + result.Properties["sAMAccountName"][0] + "\n" +
"フルネーム: " + result.Properties["displayName"][0];
MessageBox.Show(userInfo);
}
else
{
MessageBox.Show("ユーザーが見つかりませんでした。");
}
}
}
このコードでは、指定したsAMAccountName
を持つユーザーの情報を取得し、ユーザー名とフルネームをメッセージボックスで表示しています。
ユーザー情報の更新
既存のユーザーの情報を更新するには、DirectoryEntry
を使用して属性を変更し、CommitChangesメソッド
で保存します。
以下は、ユーザーのフルネームを更新するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// ユーザー情報の更新
directoryEntry.Properties["displayName"].Value = "新しいフルネーム";
directoryEntry.CommitChanges(); // 変更を保存
MessageBox.Show("ユーザー情報が更新されました。");
}
}
このコードでは、指定したユーザーのフルネームを新しいフルネーム
に変更し、変更を保存しています。
ユーザーの追加と削除
Active Directoryに新しいユーザーを追加するには、DirectoryEntry
を使用して新しいエントリを作成します。
また、ユーザーを削除するには、Deleteメソッド
を使用します。
以下は、ユーザーの追加と削除のサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry directoryEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// DirectoryEntryの初期化
directoryEntry = new DirectoryEntry("LDAP://OU=Users,DC=example,DC=com");
// ユーザーの追加
DirectoryEntry newUser = directoryEntry.Children.Add("CN=Jane Doe", "user");
newUser.Properties["sAMAccountName"].Value = "janedoe";
newUser.Properties["userPrincipalName"].Value = "janedoe@example.com";
newUser.CommitChanges(); // 変更を保存
MessageBox.Show("新しいユーザーが追加されました。");
// ユーザーの削除
directoryEntry.Children.Remove(newUser); // 追加したユーザーを削除
directoryEntry.CommitChanges(); // 変更を保存
MessageBox.Show("ユーザーが削除されました。");
}
}
このコードでは、Jane Doe
という新しいユーザーを追加し、その後すぐに削除しています。
Children.Addメソッド
を使用して新しいユーザーを作成し、Children.Removeメソッド
で削除しています。
応用例
グループメンバーシップの管理
Active Directory内のユーザーをグループに追加したり、グループから削除したりすることができます。
以下は、ユーザーを特定のグループに追加するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry groupEntry;
private DirectoryEntry userEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// グループとユーザーのDirectoryEntryを初期化
groupEntry = new DirectoryEntry("LDAP://CN=Sales,OU=Groups,DC=example,DC=com");
userEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// ユーザーをグループに追加
groupEntry.Properties["member"].Add(userEntry.Properties["distinguishedName"].Value);
groupEntry.CommitChanges(); // 変更を保存
MessageBox.Show("ユーザーがグループに追加されました。");
}
}
このコードでは、Sales
というグループにJohn Doe
というユーザーを追加しています。
member
プロパティにユーザーのdistinguishedName
を追加し、変更を保存しています。
ユーザーのパスワードリセット
ユーザーのパスワードをリセットするには、DirectoryEntry
を使用して新しいパスワードを設定します。
以下は、ユーザーのパスワードをリセットするサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry userEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// ユーザーのDirectoryEntryを初期化
userEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// パスワードのリセット
userEntry.Invoke("SetPassword", new object[] { "newPassword123" });
userEntry.CommitChanges(); // 変更を保存
MessageBox.Show("ユーザーのパスワードがリセットされました。");
}
}
このコードでは、John Doe
というユーザーのパスワードをnewPassword123
にリセットしています。
SetPasswordメソッド
を呼び出して新しいパスワードを設定し、変更を保存しています。
ユーザーのロック解除
ユーザーがロックされている場合、そのロックを解除することも可能です。
以下は、ユーザーのロックを解除するサンプルコードです。
using System.DirectoryServices;
public partial class MyForm : Form
{
private DirectoryEntry userEntry;
public MyForm()
{
InitializeComponent(); // フォームの初期化
// ユーザーのDirectoryEntryを初期化
userEntry = new DirectoryEntry("LDAP://CN=John Doe,OU=Users,DC=example,DC=com");
// ユーザーのロック解除
userEntry.Properties["lockoutTime"].Value = 0; // ロック解除
userEntry.CommitChanges(); // 変更を保存
MessageBox.Show("ユーザーのロックが解除されました。");
}
}
このコードでは、John Doe
というユーザーのロックを解除しています。
lockoutTime
プロパティを0
に設定することで、ユーザーのロックを解除し、変更を保存しています。
まとめ
この記事では、C#を使用してActive Directoryにアクセスし、ユーザー管理を行うための基本的な方法について解説しました。
具体的には、DirectoryEntry
やsAMAccountName
を利用したユーザー情報の取得、更新、グループメンバーシップの管理、パスワードリセット、ユーザーのロック解除などの実践的な例を紹介しました。
これらの知識を活用することで、Active Directoryを効果的に管理し、業務の効率化を図ることが可能です。
ぜひ、実際のプロジェクトにおいてこれらの技術を試してみてください。