Предлагаю Вашему вниманию мой метод работы с атрибутом 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"
}
}