Bir etki alanı kullanıcı makinelerinin üyesi yöneticilerine olup olmadığını kontrol etmek bazı kodlar var grubu:Yavaş AD grup üyeliği arama
public static bool ActiveDirectoryGroupMembershipOk(string userid, string groupName)
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine, "my_pc_name"))
{
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "administrators"))
{
if (grp != null)
{
foreach (Principal p in grp.GetMembers(false))
{
if (p is UserPrincipal && p.SamAccountName.Equals(userid, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
}
}
}
}
return false;
}
Çalışır, ancak aşağıdaki kod satırı tamamlamak için biraz saniye sürer:
using (GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "administrators"))
Üyelik aramanın daha hızlı bir yolu var mı?
Önemli mi, önemsiz mi bilmiyorum, ancak userid bir Etki Alanı Kullanıcısıdır ve windows grubu yerel bilgisayar üzerindedir.
Benim deneyimimdeki AD her zaman yavaştır, bu yüzden sonuçları önbelleğe alma eğilimindeyim. Sizin durumunuzda, bir global global değişken grp kullanırım ve FindByidentity'yi bir kere – Pikoh
numaralı telefondan ararım. Yani bu benim ilk isteğim, bu yavaş. Bir grubun üyeleri yerine kullanıcının üyeliklerine bakmakla ilgili farklı bir yazı okudum - bu daha hızlı olabilirdi. [Link] (http://stackoverflow.com/questions/1675813/faster-way-to-find-out-if-a-user-exists-on-a-system) Ancak bu kodu işe yaratamadım. –