当我对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。
发布于 2018-12-03 16:14:34
每当我通过LDAP查询AD中的非强制性属性时(该属性不一定存在于DirectorySearcher找到的所有对象上),我就使用以下模式:
const string propertykey = "msFVE-RecoveryPassword";
if (res.Properties.Contains(propertykey))
{
string value = res.Properties[propertykey][0].ToString();
}在单值属性上使用[0]索引通常被认为是安全的;如果您处理的是多值属性(或使用枚举器),则可能需要添加计数>0的检查。
https://stackoverflow.com/questions/53597431
复制相似问题