2014-03-26 24 views
0

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

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

不过,我想搜索所有位置从人来完成的搜索分开。是否有可能搜索活动目录只是找到位置(不向外看每个人)?如果是这样的搜索过滤器是什么样子?我试过objectClass = Physical-Location,DC = example,DC = com,并且没有找到任何位置(超出模式)。我不确定这是因为存在安全问题,还是无法以这种方式查找位置。

回答

0

你列出的是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),您仍然应该只能加载想要恢复的属性。

+0

但我要问的是,将拉所有地点的清单?有没有办法只是搜索位置。我认为答案是否定的,但我确实不知道...... – Bostwick

+0

嗯,我仍然不确定你的位置是什么意思,但不是,你不能仅仅为了我认为的位置进行搜索你意思是。但是,您可以使用linq从该列表中获取不同的值。再次记住,如果其中一个用户的值没有填充,它将抛出异常。请参阅上面编辑的代码。 – codingChris

+0

我实际编写的代码全部在pl/sql(所以它可以在服务器上运行),但与我的公司实现绑定,所以我没有发布它..我认为这是不可能的,只是拉一个位置列表,我只是想确认我没有错过任何东西。我确实从副本中提取了不同的列表。 – Bostwick

相关问题