public static SearchResult GetSearchResultByDN(ADHelper adHelper, string DN, ADSchemaType schemaType) { ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree); condition.SizeLimit = 1; string filter = string.Empty; switch (schemaType) { case ADSchemaType.Organizations: filter = "(objectCategory=organizationalUnit)"; break; case ADSchemaType.Users: filter = "(&(objectCategory=person)(objectClass=user))"; break; case ADSchemaType.Groups: filter = "(&(objectCategory=group)(objectClass=group))"; break; } filter = string.Format("(&(distinguishedName={0}){1})", AppendNamingContext(DN), filter); using (DirectoryEntry parentEntry = adHelper.GetRootEntry()) { var searchList = adHelper.ExecuteSearch(parentEntry, filter, condition, ADObjNeededProperties); return(searchList.FirstOrDefault()); } }
/// <summary> /// 将DirectoryEntry转换成ADSchemaType /// </summary> /// <param name="entry"></param> /// <returns></returns> public static ADSchemaType ToADSchemaType(this DirectoryEntry entry) { ADSchemaType result = ADSchemaType.Unspecified; EnumItemDescriptionList items = EnumItemDescriptionAttribute.GetDescriptionList(typeof(ADSchemaType)); foreach (EnumItemDescription item in items) { if (string.Compare(item.ShortName, entry.SchemaClassName, true) == 0) { result = (ADSchemaType)item.EnumValue; break; } } return(result); }
public static SearchResult GetSearchResultByLogonName(string logonName, ADSchemaType schemaType) { ADHelper adHelper = SynchronizeContext.Current.ADHelper; ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree); condition.SizeLimit = 1; string filter = string.Empty; string[] neededProperties = GetNeededProperties(schemaType); filter = string.Format("(samAccountName={0})", ADHelper.EscapeValueForLdapQuery(logonName)); using (DirectoryEntry parentEntry = adHelper.GetRootEntry()) { var searchList = adHelper.ExecuteSearch(parentEntry, filter, condition, neededProperties); return(searchList.FirstOrDefault()); } }
public static string[] GetNeededProperties(ADSchemaType schemaType) { string[] neededProperties = null; switch (schemaType) { case ADSchemaType.Organizations: neededProperties = ADOUObjNeededProperties; break; case ADSchemaType.Users: neededProperties = ADUserObjNeededProperties; break; case ADSchemaType.Groups: neededProperties = ADGroupObjNeededProperties; break; default: throw new NotSupportedException("不支持的类型:" + schemaType); } return(neededProperties); }
public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef) { StringBuilder strB = new StringBuilder(1024); strB.Append("(|"); if ((ADSchemaType.Domain & nMask) != 0) { strB.Append("(objectCategory=domain)"); } if ((ADSchemaType.Organizations & nMask) != 0) { string strOU = string.Empty; strOU += "(objectCategory=organizationalUnit)"; if (ef.OUFilter != string.Empty) { strOU += ef.OUFilter; } strB.Append("(&" + strOU + ")"); } if ((ADSchemaType.Container & nMask) != 0) { string strContainer = "(objectCategory=person)(objectClass=user)"; if (ef.ContainerFilter != string.Empty) { strContainer += ef.ContainerFilter; } strB.Append("(&" + strContainer + ")"); } if ((ADSchemaType.Users & nMask) != 0) { string strUser = "******"; if (ef.UserFilter != string.Empty) { strUser += ef.UserFilter; } strB.Append("(&" + strUser + ")"); } if ((ADSchemaType.Groups & nMask) != 0) { string strGroup = "(objectCategory=group)(objectClass=group)"; if (ef.GroupFilter != string.Empty) { strGroup += ef.GroupFilter; } strB.Append("(&" + strGroup + ")"); } strB.Append(")"); return(strB.ToString()); }
public static string GetFilterByMask(ADSchemaType nMask) { return(GetFilterByMask(nMask, new ExtraFilter())); }
/// <summary> /// 获取搜索结果 /// </summary> /// <param name="nativeIDs">一组NativeID</param> /// <param name="schemaType"></param> /// <param name="sizeLimit"></param> /// <returns></returns> public static IEnumerable <SearchResult> GetSearchResultsByIDs(ADHelper adHelper, IEnumerable <string> nativeIDs, ADSchemaType schemaType, int sizeLimit) { return(GetSearchResultsByIDs(adHelper, nativeIDs, GetNeededProperties(schemaType), sizeLimit)); }
public static SearchResult GetSearchResultByID(ADHelper adHelper, string nativeID, ADSchemaType schemaType) { return(GetSearchResultByID(adHelper, nativeID, GetNeededProperties(schemaType))); }
/// <summary> /// 基于单个属性的精确匹配多个结果 /// </summary> /// <param name="adHelper"></param> /// <param name="propertyName">匹配的单一属性名称</param> /// <param name="propertyValues">属性值,注意如果是字符串,会替换其中的特殊字符,只能使用字节数组或基元类型。</param> /// <param name="schemaType"></param> /// <param name="properties">要提取的属性名</param> /// <param name="sizeLimit">返回结果的数量</param> /// <returns></returns> public static IEnumerable <SearchResult> GetSearchResultsByPropertyValues(ADHelper adHelper, string propertyName, IEnumerable propertyValues, ADSchemaType schemaType, string[] properties, int sizeLimit) { var filter = ADSearchConditions.GetFilterByMask(schemaType); return(GetSearchResultsByPropertyValues(adHelper, propertyName, propertyValues, properties, sizeLimit, filter)); }
public static IEnumerable <SearchResult> GetSearchResultsByDNList(ADHelper adHelper, IEnumerable <string> rdnList, ADSchemaType schemaType, string[] properties, int sizeLimit) { ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree); condition.SizeLimit = sizeLimit; condition.PageSize = sizeLimit; var filter = ADSearchConditions.GetFilterByMask(schemaType); StringBuilder postfixBuilder = new StringBuilder(); foreach (var val in rdnList) { postfixBuilder.Append("(").Append("distinguishedName=").Append(AppendNamingContext(val)).Append(")"); } if (postfixBuilder.Length > 0) { var postExpression = postfixBuilder.Length > 0 ? "(|" + postfixBuilder.ToString() + ")" : string.Empty; filter = string.IsNullOrEmpty(filter) ? postExpression : "(&" + filter + postExpression + ")"; using (DirectoryEntry parentEntry = adHelper.GetRootEntry()) { var searchList = adHelper.ExecuteSearch(parentEntry, filter, condition, properties); return(searchList); } } else { return(new SearchResult[0]); } }
public static IEnumerable <SearchResult> GetSearchResultsByDNList(ADHelper adHelper, IEnumerable <string> rdnList, ADSchemaType schemaType, int sizeLimit) { return(GetSearchResultsByDNList(adHelper, rdnList, schemaType, GetNeededProperties(schemaType), sizeLimit)); }
/// <summary> /// 转换为AD的ObjectClass /// </summary> /// <param name="schemaType"></param> /// <returns></returns> public static string ToObjectClass(this ADSchemaType schemaType) { EnumItemDescriptionAttribute attr = EnumItemDescriptionAttribute.GetAttribute(schemaType); return(attr.ShortName); }
public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef) { StringBuilder strB = new StringBuilder(1024); strB.Append("(|"); if ((ADSchemaType.Domain & nMask) != 0) strB.Append("(objectCategory=domain)"); if ((ADSchemaType.Organizations & nMask) != 0) { string strOU = string.Empty; strOU += "(objectCategory=organizationalUnit)"; if (ef.OUFilter != string.Empty) strOU += ef.OUFilter; strB.Append("(&" + strOU + ")"); } if ((ADSchemaType.Container & nMask) != 0) { string strContainer = "(objectCategory=person)(objectClass=user)"; if (ef.ContainerFilter != string.Empty) strContainer += ef.ContainerFilter; strB.Append("(&" + strContainer + ")"); } if ((ADSchemaType.Users & nMask) != 0) { string strUser = "******"; if (ef.UserFilter != string.Empty) strUser += ef.UserFilter; strB.Append("(&" + strUser + ")"); } if ((ADSchemaType.Groups & nMask) != 0) { string strGroup = "(objectCategory=group)(objectClass=group)"; if (ef.GroupFilter != string.Empty) strGroup += ef.GroupFilter; strB.Append("(&" + strGroup + ")"); } strB.Append(")"); return strB.ToString(); }
public static string GetFilterByMask(ADSchemaType nMask) { return GetFilterByMask(nMask, new ExtraFilter()); }