[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を効果的に管理し、業務の効率化を図ることが可能です。
ぜひ、実際のプロジェクトにおいてこれらの技術を試してみてください。