ローカルの WinNT グループのメンバーを取得すると、なぜかすべてのメンバーが返されません。私は追加します:
- Active Directory ユーザー
- Active Directory グループ
どちらも成功しましたが (写真を参照)、後で表示されるのはユーザーのみです。
質問は:
- 追加されたグループはどうなりますか?
- コード サンプル 'GetMembers()' の最後のメソッドを参照してください。
- これは既知の問題ですか?
- 利用可能な回避策はありますか?
どうもありがとう!!
string _domainName = @"MYDOMAIN";
string _basePath = @"WinNT://MYDOMAIN/myserver";
string _userName = @"MYDOMAIN\SvcAccount";
string _password = @"********";
void Main()
{
CreateGroup("lg_TestGroup");
AddMember("lg_TestGroup", @"m.y.username");
AddMember("lg_TestGroup", @"Test_DomainGroup");
GetMembers("lg_TestGroup");
}
// Method added for reference.
void CreateGroup(string accountName)
{
using (DirectoryEntry rootEntry = new DirectoryEntry(_basePath, _userName, _password))
{
DirectoryEntry newEntry = rootEntry.Children.Add(accountName, "group");
newEntry.CommitChanges();
}
}
// Add Active Directory member to the local group.
void AddMember(string groupAccountName, string userName)
{
string path = string.Format(@"{0}/{1}", _basePath, groupAccountName);
using (DirectoryEntry entry = new DirectoryEntry(path, _userName, _password))
{
userName = string.Format("WinNT://{0}/{1}", _domainName, userName);
entry.Invoke("Add", new object[] { userName });
entry.CommitChanges();
}
}
// Get all members of the local group.
void GetMembers(string groupAccountName)
{
string path = string.Format(@"{0}/{1}", _basePath, groupAccountName);
using (DirectoryEntry entry = new DirectoryEntry(path, _userName, _password))
{
foreach (object member in (IEnumerable) entry.Invoke("Members"))
{
using (DirectoryEntry memberEntry = new DirectoryEntry(member))
{
string accountName = memberEntry.Path.Replace(string.Format("WinNT://{0}/", _domainName), string.Format(@"{0}\", _domainName));
Console.WriteLine("- " + accountName); // No groups displayed...
}
}
}
}
更新 #1 グループ メンバーの順序が重要なようです。GetMembers()の列挙子が Active Directory グループに遭遇するとすぐに、残りの項目も表示されません。したがって、この例で「Test_DomainGroup」が最初にリストされている場合、GetMembers()は何も表示しません。