在执行目录搜索中的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查找其他属性,例如用户帐户或计算机名称,但这给我带来了麻烦。我了解错误是什么,我只是不知道是什么导致了该错误,而且我似乎也找不到其他涵盖该主题的答案。任何输入表示赞赏。
以下是例外: 索引超出范围。必须为非负数并且小于集合的大小。参数名称:索引。
在进一步调查中,似乎directorysearcher只是在搜索封装msFVE-RecoveryInformation属性的属性。如果我尝试根据选定的计算机名称添加过滤器,它将不会提供具有实际值的SearchResult属性。例如,如果我尝试基于“ cn”设置过滤器,它将返回BitLocker密钥的GUID。
答案 0 :(得分:1)
每当我通过LDAP从AD查询非强制属性(该属性不一定在DirectorySearcher找到的所有对象上都存在)时,我都会使用以下模式:
const string propertykey = "msFVE-RecoveryPassword";
if (res.Properties.Contains(propertykey))
{
string value = res.Properties[propertykey][0].ToString();
}
对于单值属性,通常认为使用[0]
索引是安全的;如果要处理多值属性(或使用枚举数),则可能需要添加Count> 0的检查。