我正在使用
DirectorySearcher
通过其(对象)GUID 查找 AD 安全组。
这是我到目前为止的代码:
using (var container = new DirectoryEntry("LDAP://host:port/DC=X,DC=Y", User, Pass, AuthenticationType)
{
using (var searcher = new DirectorySearcher(container))
{
searcher.Filter = $"(objectguid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)"
var result = searcher.FindOne();
}
}
不幸的是,结果总是返回 null,并且我无法更改
DirectoryEntry
的路径。
要使用
objectGuid
进行查询需要一种特殊的格式,我现在不太记得了,但它很复杂。
但是还有更好的方法。您可以使用 GUID 直接绑定到对象,而无需搜索,使用以下格式:
var result = new DirectoryEntry("LDAP://host:port/<GUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>", User, Pass, AuthenticationType)
更多信息请参见此处:使用 objectGUID 绑定到对象
您也可以对 SID 执行相同操作:使用 SID 绑定到对象
为了匹配活动目录格式,我找到了以下解决方案:
Guid groupId = new Guid("ed0ec41e-38f9-4826-bfe9-25946bf795ae")
string activeIdFormat = string.Join('\\', BitConverter
.ToString(groupId.ToByteArray())
.Split("-"))
.Insert(0, "\\");
// "\\1E\\C4\\0E\\ED\\F9\\38\\26\\48\\BF\\E9\\25\\94\\6B\\F7\\95\\AE"
string searchFilter=$"(&(objectCategory=group)(objectGUID={activeIdFormat}))";