WinNTグループのメンバーのリストを取得する
-
05-07-2019 - |
質問
スタックオーバーフローに関するこれに似た質問がいくつかありますが、まったく同じではありません。
win xpコンピューターでローカルグループを開いて、または作成し、それにメンバー、ドメイン、ローカルアカウント、および既知のアカウントを追加します。また、ユーザーが既にメンバーであるかどうかを確認して、同じアカウントを2回追加しないようにし、おそらく例外を取得します。
これまでのところ、 WinNT://
プロバイダーでDirectoryEntryオブジェクトを使用し始めました。これは大丈夫ですが、グループのメンバーのリストを取得する方法に固執していますか?
誰でもこれを行う方法を知っていますか?または、DirectoryEntryを使用するよりも優れたソリューションを提供しますか?
解決
OK DirectoryEntryオブジェクトを取得して「標準」メソッドを使用してローカルグループのメンバーにアクセスすることはできません。メンバーを列挙するために取得できる唯一の方法は、Invokeメソッドを使用してネイティブオブジェクトのMembersメソッドを呼び出すことです。 p>
using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")) { foreach(object member in (IEnumerable) groupEntry.Invoke("Members")) { using(DirectoryEntry memberEntry = new DirectoryEntry(member)) { Console.WriteLine(memberEntry.Path); } } }
同様の手法を使用して、ローカルグループのメンバーを追加および削除しました。
うまくいけば、これは他の誰かにも役立ちます。 キース。
編集ティム: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.dllのSystem.DirectoryServices名前空間 。
Microsoftは、System.DirectoryServices名前空間の2つの主要なクラスを使用することをお勧めします: DirectoryEntry および DirectorySearcher 。ほとんどの場合、DirectorySearcherクラスのみを使用すれば十分です。
更新:マシンでテストしました-動作します。しかし、多分私は誤解しました あなたの質問。
優れた CodeProjectの記事の例を次に示します。
特定のADグループに属するユーザーのリストを取得する
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;
}