|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell |
|
PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell
|
Новый участник Сообщения: 29 |
Добрый день!
Такая задача стоит: Из файла .csv (составленного сторонним софтом) импортировать в ActiveDirectory изменения в списоке пользователей, заменяя устаревшую информацию (телефоны, должности) в AD. Новых юзверей создавать не надо. Только менять несоответствующую информацию. Т.е. есть файл типа: В AD есть пользователь Иван Иваныч, с неправильным или пустым email, телефоном и т.п. Нужно, чтобы программа меняла данные в AD, при несовпадении с данными из csv. Долго бьюсь, читал много в интернетах - пока что не получается. Пробовал вот эту тему , подправим под себя (как умел), не помогло. Может кто готовое решение показать? |
|
Отправлено: 17:57, 03-07-2012 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать foreach ($user in $users) { $objuser = ([adsisearcher]"(mail=$($user.mail))").FindOne().GetDirectoryEntry() $props | Foreach { $prop = $_.ToLower() $log = New-Object Text.StringBuilder $oldprop = $objuser.InvokeGet($prop) if ($user.$prop -ne $oldprop) { $objuser.Put("$prop",$user.$prop) $text = "{0} : old {1} new {2} - {3}" -f $objuser.name[0],$oldprop,$user.$prop,(Get-Date) $log.AppendLine($text) | Out-Null } } try { $objuser.SetInfo() $log.ToString() | Out-File result.txt -Append } catch { $_ } } |
Отправлено: 00:10, 06-07-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Спасибо, проблема только в том, что result.txt пустой.
Хотя в АД точно данные менялись из csv. Вот с такой ошибкой выбивает: |
Последний раз редактировалось rox33, 12-07-2012 в 13:08. Отправлено: 16:50, 11-07-2012 | #12 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Таки всё равно 2 вопроса:
1. При наличии пустых строк в csv файле (например, у пользователя нет мобильного телефона и в csv получается что-то вроде test.test@test.ru;;;company;1) - скрипт выдаёт миллион ошибок и запарывается на первой же пропущенной строке. 2. Логирование работает, но перестаёт, как только видит пустые строки (опять! ![]() Test: old %% new ** - 19.07.2012 13:34:00 User: old ** new && - 19.07.2012 13:34:01 Как же всё-таки избавится от этой проблемы? |
Последний раз редактировалось rox33, 19-07-2012 в 13:41. Отправлено: 13:35, 19-07-2012 | #13 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать 1. Конкретно в каких строках?
2. Добавить проверку if ($log.ToString()) - имеет не пустое значение. "скрипт выдаёт миллион ошибок и запарывается на первой же пропущенной строке. " - откуда же миллион ошибок,раз все по вашим словам стопорится на первой строке? ![]() |
Отправлено: 14:12, 19-07-2012 | #14 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать 2 Kazun:
Ошибки выдаёт и в саму АД ничего не пишет. Т.е. отрабатывает с ошибками, АД при этом не меняя. |
Отправлено: 15:04, 19-07-2012 | #15 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Да, и ещё - по какой-то причине, при попытке изменить из большого csv файла (порядка 150 строк) он частенько меняет e-mail у сотрудников.
Видимо где-то он видит знак конца строки и вписывает данные, следующего в списке сотрудника, предыдущему сотруднику. Получается ПОЛНЫЙ бардак. Судя по всему происходит это когда он находит в списке сотрудника, которого НЕТ в AD. Можно ли это исправить? |
Отправлено: 16:19, 19-07-2012 | #16 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:55, 19-07-2012 | #17 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Заработало, спасибо огромное!
И на последок 2 вопроса: 1. как ошибки вставить в файл result.txt (или error.txt, не обязательно в 1 файл вести запись всех событий работы скрипта, можно в 2) 2. как более красиво писать лог, без пропуска строк? (если сложно - не надо). Спасибо ещё раз огромное! |
Отправлено: 18:12, 19-07-2012 | #18 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать 1. В блок catch вставьте нужное логирование
2. Сделать проверку if ($log.ToString()) - что значения является не пустым и заменить AppendLine на Append |
Последний раз редактировалось Kazun, 19-07-2012 в 18:39. Отправлено: 18:30, 19-07-2012 | #19 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Всё сработало, но опять вопрос =(
Как наладить работу скрипта в случае, если в csv файле есть пустые ячейки, например: mail;company;title;phone;mobile;displayname test@test.ru;test;tester;;;tester При наличии пропусков (нет телефона, должность не указана, отдела (в моём ксв несколько больше полей, чем я тут привёл) - ксв не отрабатывает (в АД замену значений не производит). Нашел ваш совет, вставить в код: $user.$prop -ne $objuser.InvokeGet($prop)) -and $user.$prop Для проверки на пустое свойство в CSV. Я туповат и не понимаю куда в код с логом это вставить =( в строку $oldprop = $objuser.InvokeGet($prop) Так: $oldprop = ($objuser.InvokeGet($prop) - and $user.$prop) ? И ещё result.txt записывает изменения только если менялась должность. Телефоны, компанию - не записывает. В чём может быть дело? |
Последний раз редактировалось rox33, 20-07-2012 в 12:47. Отправлено: 12:19, 20-07-2012 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MySQL - Импорт XML в SQL | u_ku_shu | Программирование и базы данных | 8 | 22-07-2012 17:47 | |
PowerShell - PowerShell | bort-747 | Скриптовые языки администрирования Windows | 0 | 10-04-2012 11:29 | |
PowerShell - Импорт пользователей с помощью POwerShell и CSV файла. | Temafet | Скриптовые языки администрирования Windows | 19 | 18-01-2012 16:45 | |
Система - Windows PowerShell | shoot | Программное обеспечение Windows | 13 | 27-11-2011 02:23 | |
Разное - PowerShell | Butunin Klim | Программирование и базы данных | 1 | 31-07-2008 18:39 |
|