【发布时间】:2018-12-03 16:02:57
【问题描述】:
当我对 BitLocker 恢复密钥执行目录搜索时,我似乎无法返回任何有意义的搜索结果。
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。
【问题讨论】:
-
您是否(使用调试器)验证
res.Properties包含您期望的值?res.Properties["msFVE-RecoveryPassword"]是否存在,如果存在,它的价值是什么? -
请,如果您提到异常,请包括完整的异常信息,尤其是在哪个源代码行抛出异常,以及它的调用堆栈。 @stijn 很可能是正确的,只是并非
result中的所有项目都具有该属性,因此属性索引器或[0]索引器会抛出。 -
正如@Stijin 指出的,您需要检查
res.Properties["msFVE-RecoveryPassword"][0] != null -
@Nilesh 如果数组不包含仍然会抛出“超出范围”异常的任何成员
标签: c# active-directory directorysearcher bitlocker