Исключение, вызывающее "FindAll" с аргументом (ами) "0" - поиск в LDAP по доверенным доменам

Мой подход заключается в том, чтобы получить последние ModifyTimeStamp после сканирования на всех DC. Сценарий в моем коде:

Сначала я сканирую на PDC, чтобы получить distinguishedName значения, и после этого я сканирую все DC также, чтобы получить distinguishedName значения, если они -eq друг другу, он напечатает ModifyTimeStamp что означает все ModifyTimeStamp значения каждого DC будут храниться в массиве. Arraylist напечатает максимальные значения затем. В дальнейшем:

$TrustedDomain = "test.com"
$context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext("domain",$TrustedDomain)
$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($context)
$PDC = $D.PdcRoleOwner 
$ADSearch = New-Object System.DirectoryServices.DirectorySearcher 
$ADSearch.SearchRoot ="LDAP://$PDC"
$ADSearch.SearchScope = "subtree"
$ADSearch.PageSize = 100
$ADSearch.Filter = "(&(objectCategory=person)(objectClass=user))"
foreach($pro in $properies)
{
    $ADSearch.PropertiesToLoad.add($pro)| out-null
}
$userObjects = $ADSearch.FindAll()

$dnarr = New-Object System.Collections.ArrayList
Function modiScan{
    $Searcher = New-Object System.DirectoryServices.DirectorySearcher 
    $Searcher.PageSize = 100 
    $Searcher.SearchScope = "subtree" 
    $Searcher.Filter = "(&(objectCategory=person)(objectClass=user))"
    $Searcher.PropertiesToLoad.Add("distinguishedName")|Out-Null
    $Searcher.PropertiesToLoad.Add("modifyTimeStamp")|Out-Null
    forEach ($users In $userObjects) 
    { 

            $DN = $users.Properties.Item("distinguishedName")[0]
            $dnarr.add($DN)|Out-Null
    }
    #$dnarr
    foreach($dnn in $dnarr){
                $lastmd = New-Object System.Collections.ArrayList
                ForEach ($DC In $D.DomainControllers){

                    $Server = $DC.Name
                    $Base = "LDAP://$Server/"+$dnn
                    $Searcher.SearchRoot = $Base 
                    $Results2 = $Searcher.FindAll()
                    ForEach ($Result2 In $Results2) 
                    {                          
                        $DN2 = $Result2.Properties.Item("distinguishedName")[0]
                        if($DN2 -eq $dnn){
                            $modi = $Result2.Properties.Item("modifyTimeStamp")[0]
                            $lastmd.Add($modi)|Out-Null
                        } 
                    } 
                }
      $lastModi = ($lastmd |measure -max).maximum      
      if($lastModi -ne $null){   
            $lastModi = $lastModi.ToString("yyyy/MM/dd")               
        }
        else{
            $lastModi = "N/A"
        }


        $lastModi
   }
}
modiScan

У меня есть ошибка:

Exception calling "FindAll" with "0" argument(s): "Unknown error (0x80005000)"
At C:\Users\Ender\trustedScan.ps1:40 char:21
+                     $Results2 = $Searcher.FindAll()
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : COMException

Я выполнил на текущем Домене это работало как очарование. Но когда я пытаюсь поставить доверенный домен, я получаю эту ошибку.

1 ответ

попробуйте установить свойство AuthenticationType объекта DirectoryEntry:

      $dirEntry = [System.DirectoryServices.DirectoryEntry]::new("LDAP://$PDC")
$dirEntry.AuthenticationType = [System.DirectoryServices.AuthenticationTypes]::SecureSocketsLayer + [System.DirectoryServices.AuthenticationTypes]::Secure

$ADSearch.SearchRoot = $dirEntry

в этом случае вы можете подключиться к LDAPS (LDAP через SSL). поэтому, если ваш сервер настроен на отклонение незащищенных запросов ldap, он может отправлять запросы безопасным способом.

Другие вопросы по тегам