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