【问题标题】:AD GroupPrincipal: Exception has been thrown by target of invocationAD GroupPrincipal:调用目标已引发异常
【发布时间】:2015-12-02 18:24:07
【问题描述】:

我能够以该用户身份运行以下代码,在所有其他情况下都没有问题。出于某种原因,在这种特殊情况下,在将用户添加到组并检查是否已添加用户之前,它给了我这个例外:

调用的目标已抛出异常。

这个错误发生在调用行。

这不应该发生。发送的目录对象是正确的,该组存在,我可以从中删除成员就好了,我什至可以将成员添加到其中而无需检查作为测试。在我的应用程序的其他区域中,此代码的使用没有错误。我在许多其他应用程序中使用此代码,并且多年来一直在使用它。这里发生了什么?我忘记了什么?

private bool userIsMember(string strUser, DirectoryEntry strGroup)
{
    bool result = true;
    try
    {
        object[] args = { strUser };
        object IsMember = strGroup.Invoke("IsMember", args);

        if ((bool)IsMember == true)
        {
            result = true;
        }
        else
        {
            result = false;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Problem with user: " + strUser + "\r\n\r\n" + ex.Message + "\r\n\r\n" + ex.ToString());
    }

    return result;
}

【问题讨论】:

    标签: c# active-directory adsi


    【解决方案1】:

    如果它在其他应用程序中工作,那么我猜想为什么它不能在这里工作是因为运行此代码的用户的凭据有所不同(换句话说,安全性)。

    但无论如何,如果可以的话,我会改用 System.DirectoryServices.AccountManagement 中的类。它们对 C# 更友好:

    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
    GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "GName");
    

    GroupPrincipal 有一个可以搜索的 Members 属性。

    【讨论】:

    • 上面的方法很有帮助,但是当使用它来检查用户是否是组的成员时,它会像疯了一样抛出异常。我假设你的意思是检查 bool group.members.contains(userprincipal user)
    猜你喜欢
    • 2019-01-22
    • 2018-11-08
    • 2018-02-14
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2011-12-15
    相关资源
    最近更新 更多