Powershell Get-ADUser - недопустимая ошибка контекста перечисления - PullRequest
0 голосов
/ 27 ноября 2018

У меня проблемы с получением всех пользователей AD в моей рабочей среде.Он работает около 30 минут, прежде чем отобразится следующая ошибка:

    Get-ADUser : The server has returned the following error: invalid enumeration context.
At line:3 char:19
+                   Get-ADUser  -filter * -Properties * |
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Я провел некоторое исследование и обнаружил, что MaxEnumContextExpiration = 30 минут, и решил, что по этой причине он останавливается на 30 минут.

Мой вопрос: есть ли более быстрый способ собрать всех пользователей в моей рабочей среде (около 60 тыс. Сотрудников) вместе со всей их информацией (имя, имя Samaccount, описание, членство в группе, состояние учетной записи и т. Д ...)

Это скрипт, который у меня сейчас есть:

              Import-module activedirectory
              $daTA=@(
              Get-ADUser  -filter * -Properties * |  
              Select-Object @{Label = "FirstName";Expression = {$_.GivenName}},  
              @{Name = "LastName";Expression = {$_.Surname}},
              @{Name = "Full address";Expression = {$_.StreetAddress}},
              @{Name = "Fullname";Expression = {$_.Name}},
              @{Name = "LogonName";Expression = {$_.Samaccountname}},
              @{Name = "City";Expression = {$_.City}}, 
              @{Name = "State";Expression = {$_.st}}, 
              @{Name = "Post Code";Expression = {$_.PostalCode}}, 
              @{Name = "Country/Region";Expression ={$_.Country}},
              @{Name = "MobileNumber";Expression = {$_.mobile}},
              @{Name = "Phone";Expression = {$_.telephoneNumber}}, 
              @{Name = "Description";Expression = {$_.Description}},
              @{name=  "OU";expression={$_.DistinguishedName.split(',')[1].split('=')[1]}},
              @{Name = "Email";Expression = {$_.Mail}},
              @{Name = "MemberOfGroups";e= { ( $_.memberof | % { (Get-ADGroup $_).Name }) -join “,” }},
              @{Name = "Primary Group";Expression= {$_.primarygroup  -replace '^CN=|,.*$'}},
              @{Name = "UserPrincipalName";Expression = {$_.UserPrincipalName}},
              @{Name = "LastLogonTimeSTamp";Expression = {if(($_.lastLogonTimestamp -like '*1/1/1601*' -or $_.lastLogonTimestamp -eq $null)){'NeverLoggedIn'} Else{[DateTime]::FromFileTime($_.lastLogonTimestamp)}}},
              @{Name = "Account Status";Expression = {if (($_.Enabled -eq 'TRUE')  ) {'Enabled'} Else {'Disabled'}}},
              @{Name = "LastLogonDate";Expression = {if(($_.lastlogondate -like '*1/1/1601*' -or $_.lastlogondate -eq $null)){'NeverLoggedIn'} Else{$_.lastlogondate}}},
              @{Name = "WhenUserWasCreated";Expression = {$_.whenCreated}},
              @{Name = "accountexpiratondate";Expression = {$_.accountexpiratondate}},
              @{Name = "PasswordLastSet";Expression = {([DateTime]::FromFileTime($_.pwdLastSet))}},
              @{Name = "PasswordExpiryDate";Expression={([datetime]::fromfiletime($_."msDS-UserPasswordExpiryTimeComputed")).DateTime}},
              @{Name = "Password Never";Expression = {$_.passwordneverexpires}},
              @{Name = "HomeDriveLetter";Expression = {$_.HomeDrive}},
              @{Name = "HomeFolder";Expression = {$_.HomeDirectory}},
              @{Name = "scriptpath";Expression = {$_.scriptpath}},
              @{Name = "HomePage";Expression = {$_.HomePage}},
              @{Name = "Department";Expression = {$_.Department}},
              @{Name = "EmployeeID";Expression = {$_.EmployeeID}},
              @{Name = "Job Title";Expression = {$_.Title}},
              @{Name = "EmployeeNumber";Expression = {$_.EmployeeNumber}},
              @{Name = "Manager";Expression={($_.manager -replace 'CN=(.+?),(OU|DC)=.+','$1')}}, 
              @{Name = "Company";Expression = {$_.Company}},
              @{Name = "Office";Expression = {$_.OfficeName}}
              )
              $DAta | Sort LastLogondate -Descending | 
              Export-Csv -Path c:\adusers.csv -NoTypeInformation

1 Ответ

0 голосов
/ 27 ноября 2018

Я сам не сталкивался с этой проблемой, но в основном потому, что у меня недостаточно большой среды AD для тестирования!

По предположению, я подумал, что, возможно, был переключатель -ResultSizeВот что я нашел:

-ResultSetSize Определяет максимальное количество объектов, возвращаемых для запроса доменных служб Active Directory.Если вы хотите получить все объекты, установите для этого параметра значение $ null (значение null).Вы можете использовать Ctrl + c, чтобы остановить запрос и вернуть объекты.

Значение по умолчанию - $ null.

В следующем примере показано, как установить этот параметр, чтобы получить все возвращенные значения.объекты.

-ResultSetSize $ null

Источник выше

Я знаю, что по умолчанию уже установлено значение $null,но, возможно, стоит попытаться включить коммутатор и посмотреть, имеет ли это значение.

Определенно было бы хорошо следовать советам, уже предложенным @Drew и @ Lee_Dailey.

Фильтрация по OUбудет сильно влиять на скорость и стоимость ресурсов на стороне сервера для запроса, а запрос только тех свойств, которые вам нужны, поможет ускорить его, а также уменьшить необходимую нагрузку / ОЗУ (если вы храните все это впеременная).

Дайте мне знать, если это поможет, так как мне самому любопытно!

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