Вопрос, вынесенный в заголовок, имеет однозначный ответ ещё со времён NT 4.0, а может и раньше. По умолчанию, любой пользователь домена может в него добавить до 10 компьютеров включительно. После превышения этого значения пользователь получит предупреждение “Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased” после попытки добавить компьютер в домен. Компьютер, конечно же, в домен не добавится.
А теперь немного теории. Любой компьютер в AD имеет аттрибут mS-DS-CreatorSid, в который записывается SID пользователя, который добавил этот компьютер в домен. При попытке добавить новый компьютер для пользователя считается количество объектов-компьютеров, которые он добавлял в домен ранее. Если это число 10, то пользователь не сможет добавить компьютер в домен.
В компаниях, в которых существует отдел тестирования, его сотрудники достаточно часто добавляют в домен компьютеры для тестирования. Обычно, они забывают их при этом из домена удалить. В итоге, в AD хранится некоторое количество “мёртвых” объектов-компьютеров, которые уже не используются, при этом добавляют значения к счётчику компьютеров, введённых пользователем в домен. Достаточно их удалить и пользователь снова сможет добавлять компьютеры в домен. Для решения этой задачи написал небольшой скрипт на PoSh.
$UserName = Read-Host -Prompt "Enter users name" $UserSID = (Get-QADUser -Identity $UserName -IncludeAllProperties).objectsid Get-QADComputer -SizeLimit 0 | Where-Object {$_.'mS-DS-CreatorSid' -eq $UserSID} | ft Name
Скрипт запрашивает имя пользователя (можно ввести также и логин) и выводит список компьютеров, которые он вводил в домен. Этот список можно показать пользователю, чтобы он подсказал какие из этих компьютеров можно удалить.
Не работает:
The term ‘Get-QADUser’ is not recognized as a cmdlet, function, operable program, or script file. Verify the term and t
ry again.
At C:1.ps1:2 char:24
+ $UserSID = (Get-QADUser <<<< -Identity $UserName -IncludeAllProperties).objectsid
The term 'Get-QADComputer' is not recognized as a cmdlet, function, operable program, or script file. Verify the term a
nd try again.
At C:1.ps1:4 char:16
+ Get-QADComputer <<<< -SizeLimit 0 | Where-Object {$_.'mS-DS-CreatorSid' -eq $UserSID} | ft Name
P.S. У меня Powershell 1.0, не в этом проблема?
Возможно, нужно установить дополнительные командлеты ActiveRoles Management Shell?
у меня не записывается в атрибутах параметр mS-DS-CreatorSid, как можно это исправить?
Учётную запись кто создаёт? Учётка из группы Domain/Enterprise Admins? Если да, то они не прописываются в параметр mS-DS-CreatorSid. Если нет, то хотелось бы подробностей об ОС на контроллерах домена, уровне домена/леса итд.
Можно вообще все вывести
import-module activedirectory
Get-ADComputer -filter * -Properties mS-DS-CreatorSID | ?{$_.’mS-DS-CreatorSid’} | % { $objSID = New-Object System.Security.Principal.SecurityIdentifier($_.’mS-DS-CreatorSID’); $objUser =$objSID.Translate([System.Security.Principal.NTAccount]); Write-Host $_.Name $objUser.Value}