Предлагаю Вашему вниманию мой метод работы с атрибутом Active Directory sIDHistory. А именно — будем производить поиск объекта по этому атрибуту.
Но вначале поговорим о самом атрибуте. sIDHistory служит для создания соответствия объектов в Active Directory, необходим он, например, при миграции учетных записей и групп из одного домена/леса в другой.
Что нам это дает? А дает это нам возможность не переназначать права на ресурсы, а оставить их «как есть».
Пример: в домене A.local есть группа A-G1, в нее входит пользователь A-U1.
Мы имеем файловый ресурс \\server01\share на который назначен доступ группе A-G1
Случилось так, что мы мигрировали в домен B.local, создали там пользователя B-U1 и прописали ему атрибут sIDHistory от пользователя A\A-U1
Теперь пользователь B\B-U1 без каких-либо дополнительных действий может входить на \\server01\share
Предположим, что пользователей у нас мигрировало 5000, некоторые из них могли полностью переименоваться, а sIDHistory выглядит как куча непонятных для администратора цифр. Найти какому пользователю в домене A соответствует пользователь из домена B просто становиться невозможно.
Скрипт на Powershell, с использованием QUESTовских коммандлетов, который выведет все объекты указанному атрибуту.
Условия для работы скрипта:
На вход можно подавать и CSV и выгрузку из групп:
Но вначале поговорим о самом атрибуте. sIDHistory служит для создания соответствия объектов в Active Directory, необходим он, например, при миграции учетных записей и групп из одного домена/леса в другой.
Что нам это дает? А дает это нам возможность не переназначать права на ресурсы, а оставить их «как есть».
Пример: в домене A.local есть группа A-G1, в нее входит пользователь A-U1.
Мы имеем файловый ресурс \\server01\share на который назначен доступ группе A-G1
Случилось так, что мы мигрировали в домен B.local, создали там пользователя B-U1 и прописали ему атрибут sIDHistory от пользователя A\A-U1
Теперь пользователь B\B-U1 без каких-либо дополнительных действий может входить на \\server01\share
Предположим, что пользователей у нас мигрировало 5000, некоторые из них могли полностью переименоваться, а sIDHistory выглядит как куча непонятных для администратора цифр. Найти какому пользователю в домене A соответствует пользователь из домена B просто становиться невозможно.
Скрипт на Powershell, с использованием QUESTовских коммандлетов, который выведет все объекты указанному атрибуту.
#Указываем пользователя, у которого будем искать sIDHistory $user="B-U1" #Выбираем нужные нам атрибуты из AD $obj=(Get-qADObject -Identity $user -service "B.local" -includedproperties sIDHistory | select name,dn,sIDHistory) #Формируем LDAP запрос $ldap="LDAP://{0}" -f $obj.dn #Создаем объект .NET, преобразуем цифры в SID $indents=([ADSI]$ldap).getex(“sidhistory”) | % { (new-object System.Security.Principal.SecurityIdentifier $_ ,0).value } # По скольку sIDHistory может содержать много строк соответствий, то ищем все foreach ($indent in $indents) { get-qadobject -identity $indent -service "A.local" }
Условия для работы скрипта:
- Точно знаем домен пользователя
На вход можно подавать и CSV и выгрузку из групп:
users.txt:
name
B-U1
import-csv -delimiter "`t" -path "users.txt" | % { #Указываем пользователя, у которого будем искать sIDHistory $user=$_.name #Выбираем нужные нам атрибуты из AD $obj=(Get-qADObject -Identity $user -service "B.local" -includedproperties sIDHistory | select name,dn,sIDHistory) #Формируем LDAP запрос $ldap="LDAP://{0}" -f $obj.dn #Создаем объект .NET, преобразуем цифры в SID $indents=([ADSI]$ldap).getex(“sidhistory”) | % { (new-object System.Security.Principal.SecurityIdentifier $_ ,0).value } # По скольку sIDHistory может содержать много строк соответствий, то ищем все foreach ($indent in $indents) { get-qadobject -identity $indent -service "A.local" } }
