我设法做到了。它仍然有一些问题,因为某些原因,一些广告集团,它不返回其一些成员。
如果有人知道更好的方法,请告诉我!
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "fillRow")]
public static IEnumerable getNTGroupMembers(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 st = (string) result.Properties["member"][counter];
DirectoryEntry gpMemberEntry = new DirectoryEntry(("LDAP://" + st));
if (!(gpMemberEntry == null))
{
PropertyCollection userProps = gpMemberEntry.Properties;
object objUser = userProps["sAMAccountname"].Value;
userNames.Add(objUser);
}
}
}
return userNames;
}
private static void fillRow(Object obj, out string user)
{
object row = (object)obj;
user = (string)row;
}