Как преобразовать GUID пользователя Active Directory в имя
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами научились запрещать обновления Windows навсегда или же на нужный нам период по ряду причин. Сегодня я хочу с вами поделить одной интересной практической задачей по AD. Я хочу вам показать, как вы можете зная GUID пользователя Active Directory получить его ФИО, email в какой OU Он находится, покажу как все это можно автоматизировать с помощью PowerShell. Думаю будет интересно и полезно.
Что можно узнать по GUID пользователя Active Directory?
О том, что такое GUID я подробно вам рассказывал и много уже, где с ним встречались, только на разных сущностях. Напомню GUID (глобальный уникальный идентификатор) - это термин, используемый Microsoft для числа, которое ее программа генерирует, чтобы создать уникальную идентичность для объекта.
Какая перед до мной встала задача. Коллеги из другого отдела произвели выгрузку из Microsoft CRM, получив SystemUserId и ActiveDirectoryGuid. Они хотят понять, что это за сотрудник, активна ли его учетная запись и так далее. Все делается для аудита и очистки лишних учетных записей из БД CRM, благое дело. Информацию предоставили в виде Google таблицы из двух столбцов.
Попросили для каждой записи найти соответствующие поля:
- DistinguishedName
- Name
- Department
- Title
- Enabled
Читайте также - Переменные среды Windows
Как преобразовывать ObjectGUID в Active Directory
Для начала я покажу вам, где искать GUID пользователя. Для этой задачи у меня есть тестовый пользователь Барбоскин Геннадий. Вас нужно запросить у Active Directory его свойства, для этого откройте оболочку PowerShell ISE и введите:
Get-ADUser barboskin.g -Properties ObjectGUID
В результате вы получите длинный код ObjectGUID, это по сути и есть GUID пользователя, так же тут и SID увидите.
Простой пример преобразования GUID
$guid = "d6d869d3-f5c6-4c5e-ad6a-28e8ceba2c27"
foreach ($dom in (Get-adforest).Domains) { Get-ADObject -filter {ObjectGUID -eq $guid } -Properties DistinguishedName -Server $dom | fl }
В результате вы получили информацию, о DistinguishedName, удобно. Так вы можете подставлять любое из свойств или не одно.
Усложним немного конструкцию и произведем чтение из файла со списком GUID.
foreach ($guid in (Get-Content "C:\Temp\guid.txt"))
{
$guid
$dn = $null
$dn = (Get-ADObject -Identity $guid -Server "dc01.root.pyatilistnik.org:3268" -Properties DistinguishedName).DistinguishedName
$dn | Out-File "C:\Temp\guid-ext.txt" -Append
}
Обратите внимание, что вы сразу получите список прочитанных из файла GUID пользователя.
В результате у вас будет экспортирован текстовый файл со списком DistinguishedName.
А теперь давайте еще получим дополнительные данные:
- DistinguishedName
- ФИО
- Отдел
- Статус учетной записи Активна/Выключена
$out_file = "C:\Temp\users.csv"
$users = @()
foreach ($guid in (Get-Content "C:\Temp\guid.txt"))
{
$ADObject = $null$ADObject = Get-ADObject -Identity $guid -Server "dc01.root.pyatilistnik.org:3268"
$users += Get-ADUser $ADObject -Properties mail, Department, Title | select DistinguishedName, Name, mail, Department, Title, Enabled}$users | Export-Csv -Path $out_file -Force -Encoding Unicode -NoTypeInformation -Delimiter ";"
В результате у вас быть экспортирован CSV файл.
Теперь вам остается разделить CSV файл на столбцы, чтобы привести данные в удобную таблицу.
На этом у меня все. Если у вас еще остались вопросы, как можно из GUID пользователя получать разную информацию, то пишите в комментариях. С вами был Иван Сёмин, автор и создатель IT блога Pyatilistnik.org.