问题描述
有几个问题与堆栈溢出类似,但不完全相同.
我想在 win xp 计算机上打开或创建一个本地组并向其中添加成员、域、本地和知名帐户.我还想检查一个用户是否已经是会员,这样我就不会两次添加相同的帐户,并且可能会出现异常.
到目前为止,我开始将 DirectoryEntry 对象与 WinNT:// 提供程序一起使用.一切正常,但我一直在纠结如何获取群组成员列表?
有人知道怎么做吗?或者提供比使用 DirectoryEntry 更好的解决方案?
好的,花了一段时间,尝试了不同的解决方案,但下面给出了最适合我最初问题的解决方案.我无法使用标准"方法让 DirectoryEntry 对象访问本地组的成员,我可以让它枚举成员的唯一方法是使用 Invoke 方法调用本机对象的成员方法.><前>using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")){foreach((IEnumerable) groupEntry.Invoke("Members") 中的对象成员){using(DirectoryEntry memberEntry = new DirectoryEntry(member)){Console.WriteLine(memberEntry.Path);}}}
我还使用了类似的技术在本地组中添加和删除成员.
希望这对其他人也有帮助.基思.
EDIT by Tim:添加了 VB.Net 版本
公共函数MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)Dim 成员作为新列表(Of DirectoryEntry)尝试使用搜索作为新的 DirectoryEntry("WinNT://./" & GroupName & ",group")For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)Dim memberEntry 作为新的 DirectoryEntry(成员)members.Add(memberEntry)下一个结束使用Catch ex 作为例外MessageBox.Show(ex.ToString)结束尝试回归会员结束函数There are a couple of questions similar to this on stack overflow but not quite the same.
I want to open, or create, a local group on a win xp computer and add members to it, domain, local and well known accounts. I also want to check whether a user is already a member so that I don't add the same account twice, and presumably get an exception.
So far I started using the DirectoryEntry object with the WinNT:// provider. This is going ok but I'm stuck on how to get a list of members of a group?
Anyone know how to do this? Or provide a better solution than using DirectoryEntry?
Okay, it's taken a while, messing around with different solutions but the one that fits best with my original question is given below. I can't get the DirectoryEntry object to access the members of a local group using the 'standard' methods, the only way I could get it to enumerate the members was by using the Invoke method to call the native objects Members method.
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);
}
}
}
I also used a similar technique to add and remove members from the local group.
Hopefully this helps someone else as well. Keith.
EDIT by Tim: added VB.Net version
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
这篇关于获取 WinNT 组的成员列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)