Войти

Показать полную графическую версию : [решено] Скрипт анализа и замены ФИО в AD (или сравнение списков)


Crush45
10-06-2015, 07:56
Доброго Вам времени, уважаемые форумчане. Снова понадобилась Ваша помощь. Рассказываю суть:
До текущего времени и в данный момент все пользователи в AD (исторически так сложилось, я пришёл - так было, как говорится) заводятся, к примеру, так: ivanov_ii - Иван И. Иванов; petrov_pp - Пётр П. Петров... и так далее. Думаю логика ясна.
В прошлом году начали большие внедрения (Exchange, документооборот, Lync) и всё бы ничего, но: в документообороте в некоторых документах ФИО обрезается таким образом - Иван И.И., в Outlook поиск контактов по глобальному списку происходит только по имени (имя то первое).
Пришли к выводу, что будет проще заменить текущие "Имя О. Фамилия" на полные " Фамилия Имя Отчество" - будет гораздо удобнее и информативнее, как для документооборота с продуктами Microsoft, так и для пользования в будущем.
Так вот. Есть списки пользователей с полными ФИО в таком виде:
полные ФИО, отдел, должность (выслал отдел кадров)

плюс есть выгрузка пользователей из AD в виде CSV файла со столбцами:
sAMAccountName, cn, company, department, title
ivanov_ii, Иван И. Иванов, ООО "Рога и копыта", отдел умиротворения, начальник

Каким образом можно сравнить фамилии из двух списков, заменить ФИО из второго варианта на полные ФИО, и загрузить данную информацию в AD? В принципе - как загрузить информацию я знаю.
Важен именно процесс (скрипт) сравнения двух файлов. Я конечно понимаю, что можно и вручную, но 1200 пользователей вручную - не наш метод :)

Iska
10-06-2015, 08:33
Crush45, для того, кто будет делать, не помешают реальные образцы файлов:
Есть списки пользователей с полными ФИО в таком виде:
полные ФИО, отдел, должность (выслал отдел кадров) »
и:
выгрузка пользователей из AD в виде CSV файла со столбцами:
sAMAccountName, cn, company, department, title
ivanov_ii, Иван И. Иванов, ООО "Рога и копыта", отдел умиротворения, начальник »
упакованные в архив, каковой прикреплён к сообщению или выложен на RGhost. Желательно, чтобы в образцах этих файлов хотя бы пара-тройка записей совпадала.

Crush45
10-06-2015, 15:17
Iska, сделаем. Чуть позже выложу.

Crush45
23-06-2015, 12:05
Добавил небольшие два файлика для сравнения.
Как я это вижу:
сравниваем два файла - Берём фамилию (и имя? есть однофамильцы) из списка AD - ищем совпадение фамилии в списке от ОК - если совпадает - Берём логин sAMAccountName, берём полное ФИО и записываем через точку с запятой в новый файл merge.csv
В итоге - получаем готовый csv файл для загрузки данных в AD по sAMAccountName. sAMAccountName - уникален.

Crush45
30-06-2015, 17:50
В общем удалось всё решить используя преобразования в Excel - привёл оба списка к виду из двух столбцов - от ОК: ФамилияИмя + Отчество, из AD: sAMAccountName + cn (впоследствии пришлось заменить поле на DisplayName - так как я не нашёл прямого способа изменения атрибута cn). Далее используя функции ВПР - заполнил отчества в файле для AD. Далее используя надстройку PowerQuery для Excel объединил столбцы ФамилияИмя+Отчество, в итоге на выходе получил необходимый файл с sAMAccountName,DisplayName и необходимыми доп.данными. Сохранил таблицу в csv с кодировкой Unicode (UTF8) для PowerShell и загрузил в AD следующим скриптом:
$file='C:\test.csv'
Import-CSV -Path $file | ForEach-Object { Set-ADUser -Identity $_.sAMAccountName -DisplayName $_.DisplayName }
Import-CSV -Path $file | ForEach-Object { Get-ADUser -Identity $_.sAMAccountName -Properties DisplayName,cn | Rename-ADObject -NewName $_.DisplayName }

На отладку тестового списка и понимания, что необходимо в итоге ушло порядка часа-двух. С основным списком на 1200 записей ушло минут 15 вместе с загрузкой в AD.
Всем удачи.




© OSzone.net 2001-2012