在Active Directory中给出这样的组:
MainGroup
  GroupA
    User1
    User2
  GroupB
    User3
  User4
我可以轻松确定User3是否是MainGroup或其任何子组的成员,代码如下:
using System;
using System.DirectoryServices;
static class Program {
    static void Main() {
        DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
        string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y)";
        DirectorySearcher searcher = new DirectorySearcher(user, filter);
        searcher.SearchScope = SearchScope.Subtree;
        var r = searcher.FindOne();
        bool isMember = (r != null);
    }
}
我想知道是否有类似的方法来获取作为组或其任何子组成员的所有用户,即在MainGroup的示例中获取User1,User2,User3和User4.
获取所有用户的显而易见的方法是递归查询每个子组,但我想知道是否有更简单的方法.
使用与memberOf:1.2.840.113556.1.4.1941:过滤器相同的方法,但使用域根而不是用户作为搜索库是不可行的,因为查询花费的时间太长(可能它会为域中的所有用户递归计算所有组成员资格并检查它们是否存在是特定组的成员).
获取组中所有成员(包括其子组)的最佳方法是什么?
我在通过Active Directory获取组时遇到问题 System.DirectoryServices
最初我在一个在域上注册的计算机上启动了我的应用程序,但由于它是一个活动域,我不想对AD做任何写入,所以我设置了一台Windows XP作为主机操作系统的机器,并在VM上安装了Windows Server 2003.
我在机器中添加了另一个以太网端口并设置了一个交换机,1个以太网端口专用于VM,另一个端口用于主机.
在配置IP地址以使它们通信之后,我将我的应用程序转移到主机上并将其启动,但我得到了一个DirectoryServicesCOMException.
随着用户名和密码无效的消息:(只是为了检查它是不是活动目录我创建了第三个虚拟机并安装了Windows XP,我添加到域中,并在APP中测试了凭据,这是一种享受.
所以我认为一定是因为运行应用程序的机器不是域的一部分.
下面是造成问题的代码块:
public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
     //Validate the Domain!
     try
     {
         PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
         _IsValidDomain = true;
         //Test the user login
         _IsValidLogin = Context.ValidateCredentials(Username, Password);
         //Check the Group Admin is within this user
         //******HERE
         var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
         foreach(Principal Result in Results)
         {
             if (Result.SamAccountName == "Domain Admins")
             {
                 _IsAdminGroup = true;
                 break;
             }
         } …我试图让所有组成为用户成员,甚至是嵌套的(重复),在我使用的Powershell中:
(Get-ADUser <username> -Properties MemberOf | Select-Object MemberOf).MemberOf
但它只返回用户是"直接"成员的组,就像使用AD用户控制台时所获得的那样.我单个列表中的所有组都非常有用,就像"gpresult -r"的输出一样,它显示了用户所属的所有组.
有没有办法从任何AD用户那里获得它?(不需要专门用于Powershell,也许是我还不知道的另一种工具)
任务创建一个登录页面,允许两个特定组的成员访问MVC项目中的某些控制器和操作,我开始创建AD的角色提供程序.我设法使用表单身份验证配置它,并枚举经过身份验证的用户在AD中所属的组.
然而,事实证明,我被要求设置的组不是AD组.我看到很多团体,但不是那些有问题的团体.
该请求基于以下事实:这些组出现在Exchange的全球通讯录中,但似乎没有1:1的关系.
有什么关系吗?
exchange-server roles active-directory active-directory-group
我正在使用 Azure Analysis Services 实例,需要向域中所有经过身份验证的用户授予访问权限。问题是我在 Azure AD 租户中没有看到任何类似于“每个人”或“经过身份验证的用户”的组。看起来这可以通过动态组来完成,但我想检查一下我是否忽略了默认情况下租户中已经可用的包含所有经过身份验证的用户的组。
谢谢,
埃里克·泰尔
我正在寻找一种方法来查找与特定组关联的Windows登录.我正在尝试将权限添加到仅允许以下格式的名称的工具:
DOMAIN\USER 
DOMAIN\GROUP
我有一个我需要添加的活动目录格式的用户列表:
ou=group1;ou=group2;ou=group3
我尝试添加DOMAIN\Group1,但是我收到了"用户未找到"错误.
PS也应该注意我不是兰管理员
我创建了一个WCF Web服务,以从Active Directory返回用户和组信息.它适用于大多数组和用户.
我使用directoryEntry.Invoke("groups",null)来返回指定用户所属的组.这将返回MOST组.奇怪的是我可以找到任何组并枚举其成员,即使它是我在其中一个成员上使用调用查询时丢失的组之一.
大多数表现出此行为的组都启用了Exchange.大多数有问题的用户帐户都是针对联合域中的用户,他们在我查询的域中使用Exchange服务器.我不是在尝试查询联邦域中的对象.
到目前为止我的理论:
某些安全限制不允许通过invoke()枚举所有组,即使我可以查询缺少的组并枚举其成员.
invoke与某些组子集有问题.也许通用,动态或启用Exchange的属性正在发挥作用
invoke方法不会获取所有组,因为"联合"帐户(作为其Exchange帐户设置的一部分创建)与sid映射回到其登录域之外的常规域帐户有某种不同.
我们有一个WPF应用程序.我们希望根据用户AD组成员身份重新获取对应用程序的访问权限.
我们可以将此作为每个视图的属性,还是作为用户启动应用程序时的检查?
任何代码示例将不胜感激.
我有一个字符串列表,我用它来保存超过6000个用户的列表nativeGUID.
我使用Linq将它们转换为格式的字符串数组,<GUID=nativeGUID>然后用DirectoryEntry.Properties["member"].AddRange()它们将它们添加到Active Directory中的组中.
当我调用DirectoryEntry.CommitChanges()将更改提交到AD时,大约需要20分钟才能完成.
有没有更快的方法来使用他们的大量用户添加nativeGUID?
首先,我需要在SQL Server中检索属于特定组成员的用户列表.我确实设法在网上找到了一些东西,它完美地工作.解决方案如下所示:
CREATE PROCEDURE [dbo].[NES_GetADGroupMembers]
    (@groupName VARCHAR(max))
AS 
BEGIN
    CREATE TABLE #MemberOfGroups
    (
         groupName varchar(400),
         cn varchar(400),
         displayName varchar(400)
    )
    SET NOCOUNT ON
    DECLARE @t varchar(100), @t2 varchar(1000), 
            @ot varchar (4000), @tt varchar (4000);
    DECLARE gC CURSOR FOR
        SELECT cn, distinguishedName
        FROM openquery (ADSI, 'SELECT cn, distinguishedName
                               FROM ''''LDAP://Mydomaindomain/CN=users,DC=Mydomain,DC=com''''
                               WHERE objectCategory = ''group''')
    OPEN gC
    FETCH NEXT FROM gC INTO @t, @t2
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @ot = '''SELECT cn, displayName
                   FROM ''''LDAP://Mydomaindomain/CN=users,DC=Mydomain,DC=com'''' 
                   WHERE objectCategory = ''''Person'''' AND …