使用 DirectorySearcher 按 GUID 搜索 Active Directory 组

问题描述 投票:0回答:2

我正在使用

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
的路径。

c# active-directory
2个回答
0
投票

要使用

objectGuid
进行查询需要一种特殊的格式,我现在不太记得了,但它很复杂。

但是还有更好的方法。您可以使用 GUID 直接绑定到对象,而无需搜索,使用以下格式:

var result = new DirectoryEntry("LDAP://host:port/<GUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX>", User, Pass, AuthenticationType)

更多信息请参见此处:使用 objectGUID 绑定到对象

您也可以对 SID 执行相同操作:使用 SID 绑定到对象


0
投票

为了匹配活动目录格式,我找到了以下解决方案:

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}))";
© www.soinside.com 2019 - 2024. All rights reserved.