System.DirectoryServices.DirectorySearcher работает, если вызывается из PowerShell, но не вызывается из cmd.exe - PullRequest
1 голос
/ 30 мая 2011

Я написал скрипт для PowerShell 1.0 (теперь использующий 2.0), который выполняет поиск в моей Active Directory.Код следующий:

$filter = "some filter"

$rootEntry = New-Object System.DirectoryServices.DirectoryEntry

$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.SearchRoot = $rootEntry
$searcher.Filter = $filter
$searcher.SearchScope = "Subtree"

$colResults = $searcher.FindAll()

После вызова метода FindAll () экземпляра DirectorySearcher я печатаю результаты, чтобы увидеть, что я получил.

Дело в том, что если я запускаю PowerShell.exe и вызов скрипта на приглашение, я могу увидеть результаты.Но если я пытаюсь вызвать его с помощью cmd.exe, используя тот же фильтр, я не вижу результатов.FindAll () возвращает пустой набор результатов.

Я запускаю это на Windows 2003 Server.Он не поставляется с PowerShell 1.0, поэтому я скачал его и установил на сервере.Он имеет .Net Framework 2.0.

Есть предложения?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Наконец-то все заработало, сделав две вещи:

  1. Обновление до PowerShell 2.0.
  2. Запуск с опцией -File.

Итак, командабыл запущен так:

>>powershell -file ./script.ps1 "dn" "uid"

Я не уверен, в чем разница между опциями -File и -Command (кто-нибудь?), но это сработало.

Спасибо.

1 голос
/ 30 мая 2011

По умолчанию ваша точка $ rootEntry в корне вашей локальной AD i, которую вы запускаете на сервере, и это с учетными данными текущего процесса.вы не показываете, какой у вас фильтр и как вы используете свой результат.

Вот небольшой пример поиска ADSI из PowerShell

Clear-Host
# ADSI Bind with current process credentials
#$dn = [adsi] "LDAP://192.168.30.200:389/dc=dom,dc=fr"
# ADSI Bind with specific credentials
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://192.168.183.138:389/dc=societe,dc=fr","administrateur@societe.fr","test.2011")


# Look for users

$Rech = new-object System.DirectoryServices.DirectorySearcher($dn)
$rc = $Rech.filter = "((objectCategory=person))"
$rc = $Rech.SearchScope = "subtree"
$rc = $Rech.PropertiesToLoad.Add("distinguishedName");
$rc = $Rech.PropertiesToLoad.Add("sAMAccountName");  
$rc = $Rech.PropertiesToLoad.Add("ipphone");  
$rc = $Rech.PropertiesToLoad.Add("telephoneNumber");
$rc = $Rech.PropertiesToLoad.Add("memberOf");
$rc = $Rech.PropertiesToLoad.Add("distinguishedname");
$rc = $Rech.PropertiesToLoad.Add("physicalDeliveryOfficeName"); # Your attribute

$liste = $Rech.findall()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...