スタックオーバーフローについては、これに似た質問がいくつかありますが、まったく同じではありません。
Win XPコンピュータでローカルグループを開くか作成して、そのグループ、ドメイン、ローカル、およびよく知られたアカウントにメンバーを追加したいと思います。また、同じアカウントを2回追加しないように、ユーザーがすでにメンバーになっているかどうかを確認したいのですが、おそらく例外が発生します。
これまで、WinNT://
プロバイダーでDirectoryEntryオブジェクトの使用を開始しました。これは問題ありませんが、グループのメンバーのリストを取得する方法に固執していますか?
誰もがこれを行う方法を知っていますか?または、DirectoryEntryを使用するよりも優れたソリューションを提供しますか?
さて、さまざまな解決策をいじって、しばらく時間がかかりましたが、私の元の質問に最もよく合うものを以下に示します。 'standard'メソッドを使用してDirectoryEntryオブジェクトにローカルグループのメンバーにアクセスさせることができません。メンバーを列挙する唯一の方法は、Invokeメソッドを使用してネイティブオブジェクトのMembersメソッドを呼び出すことでした。
using(DirectoryEntry groupEntry = new DirectoryEntry( "WinNT://./ Administrators、group")) { foreach(object member in(IEnumerable)groupEntry.Invoke( "メンバー ")) { using(DirectoryEntry memberEntry = new DirectoryEntry(member)) { Console.WriteLine(memberEntry.Path); } } }
同様の手法を使用して、ローカルグループのメンバーを追加および削除しました。
うまくいけば、これは他の誰かにも役立つでしょう。キース。
[〜#〜] edit [〜#〜] by Tim:VB.Netバージョンを追加
Public Function MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)
Dim members As New List(Of DirectoryEntry)
Try
Using search As New DirectoryEntry("WinNT://./" & GroupName & ",group")
For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)
Dim memberEntry As New DirectoryEntry(member)
members.Add(memberEntry)
Next
End Using
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Return members
End Function
Microsoft .NET Frameworkは、Active Directoryを操作するための標準ライブラリを提供します:System.DirectoryServices名前空間System.DirectoryServices.dll 。
Microsoftは、System.DirectoryServices名前空間の2つのメインクラス(DirectoryEntryおよびDirectorySearcherを使用することをお勧めします。 -)。ほとんどの場合、DirectorySearcherクラスのみを使用するだけで十分です。
更新:自分のマシンでテストしました-動作します。しかし、多分私はあなたの質問を誤解しました。
これは優れた CodeProjectの記事 からの例です:
using System.DirectoryServices;
ArrayList GetADGroupUsers(string groupName)
{
SearchResult result;
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(cn={0})", groupName);
search.PropertiesToLoad.Add("member");
result = search.FindOne();
ArrayList userNames = new ArrayList();
if (result != null)
{
for (int counter = 0; counter <
result.Properties["member"].Count; counter++)
{
string user = (string)result.Properties["member"][counter];
userNames.Add(user);
}
}
return userNames;
}
この情報は "member"
attribute グループを表すDirectoryEntry
上。