首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectorySearcher类超出范围异常

DirectorySearcher类超出范围异常
EN

Stack Overflow用户
提问于 2018-12-03 16:02:57
回答 1查看 306关注 0票数 0

当我对BitLocker恢复键执行目录搜索时,我似乎无法返回任何有意义的搜索结果。

代码语言:javascript
复制
DirectoryEntry entry = new DirectoryEntry("LDAP://OU=MYOU,DC=MYDC", adminUsername,
            adminPassword);
        entry.Username = AdminInformation.AdminUsername;
        entry.Password = AdminInformation.AdminPassword;

        DirectorySearcher search = new DirectorySearcher(entry);
        search.PropertiesToLoad.Add("msFVE-RecoveryPassword");
        search.Filter = $"(&(cn={chosenComputer}))";

        foreach (SearchResult res in result)
        {
            textBoxBitLockerKey.Text = (res.Properties["msFVE-RecoveryPassword"][0].ToString());
        }

基本上,我用包含BitLocker键的计算机填充了一个列表(我们的组织中只有使用BitLocker的笔记本电脑)。在用户选择了笔记本之后,关联的BitLocker键应该被填充到一个文本框中,以便他们可以复制或打印,但是每次我试图从所选的计算机获取该键时,我都会得到一个超出界限的异常。我一直在使用DirectorySearcher查找其他属性,如用户帐户或计算机名,但这给我带来了麻烦。我明白错误是什么,我只是不知道是什么原因造成的,我似乎找不到任何其他的答案,足以涵盖这个主题。如有任何意见,我们将不胜感激。

这是一个例外:索引超出了范围。必须是非负的,并且小于集合的大小。参数名称:索引。

经过进一步的研究,看来该目录搜索器只在搜索封装msFVE-RecoveryInformation属性的属性。如果我尝试根据选定的计算机名称添加筛选器,它将不会提供具有实际值的SearchResult属性。例如,如果我试图基于"cn“设置过滤器,它将返回BitLocker键的GUID。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-03 16:14:34

每当我通过LDAP查询AD中的非强制性属性时(该属性不一定存在于DirectorySearcher找到的所有对象上),我就使用以下模式:

代码语言:javascript
复制
const string propertykey = "msFVE-RecoveryPassword";
if (res.Properties.Contains(propertykey))
{
    string value = res.Properties[propertykey][0].ToString();
}

在单值属性上使用[0]索引通常被认为是安全的;如果您处理的是多值属性(或使用枚举器),则可能需要添加计数>0的检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53597431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档