Ошибка the administrative limit for this request was exceeded
Добрый день! Уважаемые гости блога. Многие вещи, любой системный администратор старается автоматизировать и это правильный подход. Ранее я с вами делился скриптом по поиску в Active Directory устаревших объектов компьютеров с последующим отключением с переносом в нужную OU. Просматривая логи данного скрипта я обратил внимание, что попадающий под критерии компьютер не был отключен, хотя уже давно был выведен из эксплуатации. При попытке ручного отключения выскакивала интересная ошибка "Windows cannot disable object". Ниже я подробнее опишу данную проблему и решение.
Ошибка отключения объекта компьютера в Active Directory
Как я писал выше через скрипт поиска неактивных компьютеров Active Directory я получал ошибку на одной учетной записи сервера. Попытавшись через оснастку ADUC в ручном режиме отключить учетную запись я столкнулся с такой ошибкой:
Windows cannot disable object имя компьютера because: The administrative limit for this request was exceeded
Если посмотреть на контроллере домена логи в просмотре событий, то там будут два ID:
ID 1175 Internal event: A privileged operation (rights requred - 0x) on object. Failed because a non-security related error occurred.
ID 1644 Internal event: A client issued a search operation with the following operations
Как устранить ошибку
В 99% случаев у данного объекта Active Directory переизбыток информации в одном из атрибутов. Данная учетная запись принадлежала серверу, который выступал как JAMF для клиентов Mac, поэтому какую-то часть информации держал в себе. Самым правильным шагом будет изучить атрибуты. которые заполнены для данной учетной записи компьютера.
Напоминаю, для этого в Active Directory есть замечательный командлет Get-AdComputer, по которому я уже приводил примеры использования.
Для просмотра всех свойств выполните такую команду:
Get-ADComputer -Identity имя сервера -Properties *
В результате я увидел, что в атрибуте userCertificate прописано огромное количество значений, выглядит это вот так.
Атрибут userCertificate в учетной записи компьютера Active Directory используется для хранения сертификатов пользователя или компьютера в формате X.509. Этот атрибут может содержать один или несколько сертификатов, которые могут быть использованы для различных целей.
В PowerShell ISE можете посмотреть сколько всего записей содержит данный атрибут. для этого выполните:
$computerName = "JAMF"
$computer = Get-ADComputer -Identity $computerName -Properties userCertificate
if ($computer.userCertificate) {
$certificateCount = $computer.userCertificate.Count
Write-Host "Количество значений в userCertificate для компьютера '$computerName': $certificateCount"
} else {
Write-Host "Атрибут userCertificate не содержит значений для компьютера '$computerName'."
}
В графическом интерфейсе, вы можете воспользоваться редактором атрибутов, и там список будет более структурированный.
Как очистить атрибут userCertificate
Самый простой способ удалить значения атрибута userCertificate, это редактор. Из минусов, это то, что тут нельзя сделать массовую чистку. Для этого нажмите кнопку "Edit", после чего выбираете нужную строку и нажимаете кнопку "Remove". Сохраняем изменения.
Хочу отметить из практики, что тут можно все и не удалять, достаточно 5-10 записей, после чего вы сможете уже управлять вашим объектом AD.
Если хотите удалить все значения с помощью PowerShell, то команды будут такие:
$computer = Get-ADComputer -Identity "JAMF"
Set-ADComputer -Identity $computer -Clear userCertificate
Надеюсь, что это помогло вам решить ошибку "Windows cannot disable object имя компьютера because: The administrative limit for this request was exceeded". С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.