2015-02-20 4 views
1

Я использую VB.net, пытаясь запросить Active Directory, чтобы проверить, существует ли там принтер. У меня есть AD-соединение, но он не возвращает никаких значений при запуске кода. Вот фрагмент моего кодаПоиск AD для принтера с использованием VB.net

Dim searchResults As New ArrayList 
Dim myDirectorySearcher As New DirectorySearcher(myDirectoryEntry))  
Dim targetObject as string = "printerName" 
Dim searchFilter as string = "cn" 
Dim strFilter = "(&(objectClass=printer)(" & searchFilter & "=" & targetObject & "))" 

    myDirectorySearcher.Filter = strFilter 
    myDirectorySearcher.CacheResults = False 

    For i = 0 To searchCriteria.Count - 1 
     myDirectorySearcher.PropertiesToLoad.Add(searchCriteria(i).ToString) 
    Next 

    Dim mySearchResult As SearchResult = myDirectorySearcher.FindOne() 

Пробовал разные методы, но ничего, кажется, работает, любой совет будет высоко ценится.

ответ

2

Мне пришлось сделать что-то похожее на это с проектом, над которым я работал на работе. Короче говоря, я думаю, что вы можете искать по неправильному objectClass в ActiveDirectory.

Принтеры иногда добавлены под printQueue.

Ваш код будет затем что-то вроде:

Dim searchResults As New ArrayList 
Dim myDirectorySearcher As New DirectorySearcher(myDirectoryEntry))  
Dim targetObject as string = "printerName" 
Dim strFilter = "(&(objectClass=printQueue)(cn=" & targetObject & "))" 

myDirectorySearcher.Filter = strFilter 
myDirectorySearcher.CacheResults = False 

For i = 0 To searchCriteria.Count - 1 
    myDirectorySearcher.PropertiesToLoad.Add(searchCriteria(i).ToString) 
Next 

Dim mySearchResult As SearchResult = myDirectorySearcher.FindOne() 

Также стоит иметь в виду, что иногда printerName будет иметь домен добавляемый к концу, так что ваш запрос не может всегда возвращать результаты, которые вы бы ожидать.

Например, имя вашего принтера может быть PRINTER-RECEPTION, но указано в вашем домене PRINTER-RECEPTION.MYCOMPANY.DOMAIN.

Надеюсь, это вам поможет.

+0

Большое спасибо Ричарду, это сработало. –