Извлечь список пользователей (миллионы) в Active Directory с помощью Powershell - PullRequest
0 голосов
/ 08 апреля 2019

У нас есть Active Directory с 5 миллионами пользователей. При извлечении пользователей с использованием сценария powershell мы получаем сообщение об ошибке «Get-ADUser: эта операция вернулась, поскольку истек срок ожидания».

Уже пытались найти в Интернете оптимизированный скрипт. Ниже то, что мы имеем. Это прекрасно работает для ~ 500 тыс. Пользователей.

Import-Module ActiveDirectory

$Users = Get-ADUser -SearchBase "CN=Users,DC=*****,DC=*****,DC=*****" -Server "*****" -ResultPageSize 1 -LDAPFilter "(&(objectCategory=User)(whenCreated>=20190101000000.0Z)(whenCreated<=20190131235959.0Z))" -Properties WhenCreated | Select-Object Name, WhenCreated

$Users | Export-Csv C:\Temp\January2019.csv -NoTypeInformation

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Get-ADUser и все другие командлеты, которые PowerShell делает доступными для вас, удобны, но ужасны, когда дело касается производительности.

Вам лучше использовать .NET DirectorySearcher, для которого PowerShell имеет сокращение: [ADSISearcher]. Это больше кода, да, но это намного быстрее. Вот пример, который должен делать то, что вы хотите (убедитесь, что изменили первые две строки для вашего OU и сервера):

$server = "****"
$ou = "CN=Users,DC=*****,DC=*****,DC=*****"

$searcher = [ADSISearcher]"(&(objectCategory=User)(whenCreated>=20190101000000.0Z)(whenCreated<=20190131235959.0Z))"
$searcher.PropertiesToLoad.Add("whenCreated") #We only want the whenCreated attribute
$searhcer.PageSize = 200 #Get the users in pages of 200
$searcher.SearchRoot = [ADSI]"LDAP://$server/$ou"

$ADObjects = @()
foreach($result in $searcher.FindAll()) {
    #The SearchResultCollection doesn't output in PowerShell very well, so here we create
    #a PSObject for each results with the properties that we can export later

    [Array]$propertiesList = $result.Properties.PropertyNames
    $obj = New-Object PSObject
    foreach($property in $propertiesList) { 
        $obj | add-member -membertype noteproperty -name $property -value ([string]$result.Properties.Item($property))
    }
    $ADObjects += $obj
}

$ADObjects | Export-Csv C:\Temp\January2019.csv -NoTypeInformation
0 голосов
/ 02 мая 2019

Спасибо за вашу помощь.Вместо использования Get-ADUser я смог без проблем извлекать пользователей с помощью CSVDE (вариант LDIFDE, который позволяет экспортировать данные в файлы CSV).

CSVDE -f D: \ Temp \ ADUseru.csv -d"CN = Пользователи, DC = *****, DC = *****, DC = *****" -r "(& (objectClass = user) (objectCategory = person) (whenCreated> = 20120101000000.0Z) (whenCreated <= 20121231235959.0Z)) "-l" имя, whenCreated, memberOf, sAMAccountName "</p>

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