Active directory 通过LDAP搜索Active Directory中的所有位置

Active directory 通过LDAP搜索Active Directory中的所有位置,active-directory,ldap,Active Directory,Ldap,我在PL/SQL中工作,并在LDAP(使用A.D定义模式)中搜索所有位置。现在我可以应用一个简单的搜索并找到所有用户。每个用户通过以下属性拥有地址信息: 'physicalDeliveryOfficeName'; 'streetAddress'; 'l';--city 'st';--state 'postalCode';--zip code 但是,我想搜索所有位置,而不是搜索人员。是否可以搜索Active directory以仅查找位置(而不查找每个人)?如果是这样,搜索过滤器会是什么样子?我

我在PL/SQL中工作,并在LDAP(使用A.D定义模式)中搜索所有位置。现在我可以应用一个简单的搜索并找到所有用户。每个用户通过以下属性拥有地址信息:

'physicalDeliveryOfficeName';
'streetAddress';
'l';--city
'st';--state
'postalCode';--zip code

但是,我想搜索所有位置,而不是搜索人员。是否可以搜索Active directory以仅查找位置(而不查找每个人)?如果是这样,搜索过滤器会是什么样子?我尝试了objectClass=Physical Location,DC=example,DC=com,但没有找到任何位置(架构之外)。我不确定这是因为有安全问题,还是无法通过这种方式查找位置

您列出的是AD中的属性。您可以在搜索中返回属性并搜索特定值,但您将始终返回属性附加到的对象(在本例中为用户)。你对搜索的细节有点了解,所以我试试看

您可以只加载您要查找的位置属性,无论是州、城市等

var domain = "mydomain.com";
var dn = "CN=Users,DC=mydomain,DC=com";

var ldapSearchFilter = "(objectClass=user)";
var connection = new LdapConnection(domain);
var attributeList = new string[] { "physicalDeliveryOfficeName", "l", "st"};

try
{
    var searchRequest = 
            new SearchRequest(dn, ldapSearchFilter,
                              SearchScope.OneLevel,
                              attributeList);

var searchResponse = 
            (SearchResponse)connection.SendRequest(searchRequest);

var locationList = (from SearchResultEntry entry in searchResponse.Entries 
                    select entry.Attributes["physicalDeliveryOfficeName"][0].ToString())
                    .Distinct().ToList();

catch (Exception ex)
{
    //Handle errors
}

这个例子需要记住一件事。如果属性未在AD中填充,WriteLine将在尝试读取属性时抛出错误。如果您使用的是其他搜索类型(可能是DirectorySearcher),您应该仍然能够加载想要返回的属性。

但我想问的是,这会不会拉出一个所有位置的不同列表?有没有一种方法可以只搜索位置。我想答案是否定的,但我不确定……我仍然不确定你所说的位置是什么意思,但不,你不能只搜索我认为你所指的位置。但是,您可以使用linq从该列表中获取不同的值。再次记住,如果某个用户的值未填充,它将抛出异常。请参阅上面编辑的代码。我实际编写的代码都是pl/sql(因此可以在服务器上运行),但与我的公司实现相关,因此我没有发布。。我想不可能只是拉一个位置列表,我只是想确认我没有遗漏什么。我确实从副本中拿出了不同的清单。。