检查跨域工作站C#的管理员权限

时间:2014-03-04 12:05:22

标签: search active-directory ldap

我正在尝试检查用户是否是特定计算机上的管理员。 我有以下代码,当计算机在同一个域时工作正常:

public bool CheckAdmins(string computerName)
{
    var identity = WindowsIdentity.GetCurrent();
    var principal = new WindowsPrincipal(identity);
    string branchnumber = computerName.Substring(0, 3);

    bool admin = false;

    if (logonUser.authenticate())
    {
        using (DirectoryEntry machine = new DirectoryEntry("WinNT://" + logonUser.Domain + "/" + computerName,logonUser.Domain + "\\" + logonUser.UserID,logonUser.Password))
        {
            //get local admin group

            using (DirectoryEntry group = machine.Children.Find("Administrators","group"))
            {
                //get all members of local admin group
                object members = group.Invoke("Members", null);

                foreach (object member in (IEnumerable)members)
                {
                    //get account name
                    string accountName = new DirectoryEntry(member).Name;
                    bool isAdmin = principal.IsInRole(accountName);
                    if (isAdmin == true) { admin = true; }
                }
            }
        }
    }
    return admin;
}

然而,跨域,这只是回来了'找不到网络路径'。 我一直在尝试LDAP,但没有走得太远。我尝试了很多方法,理想情况下需要一个例子。这就是我目前使用的:

        String strPath = "LDAP://172.24.242.51/CN=258TP520,OU=258,DC=net,DC=test,DC=co,DC=uk";
        DirectoryEntry myDE = new DirectoryEntry(strPath, "testdom\user", "password");
        List<string> memberof = new List<string>();
        foreach (object oMember in myDE.Properties["memberOf"])
        {
            memberof.Add(oMember.ToString());
        }

但是myDE.properties似乎不包含任何内容。所有帮助赞赏! 感谢

1 个答案:

答案 0 :(得分:0)

我需要将FQDN附加到计算机名,就像这样

using (DirectoryEntry machine = new DirectoryEntry("WinNT://"  + computerName + ".net.test.co.uk",logonUser.Domain + "\\" + logonUser.UserID,logonUser.Password))

这解决了我的问题。