Всім доброго часу доби.
Почав переміщати користувачів до відповідних OU. Після 15-го користувача зрозумів, що процес затягнеться надовго, та ще й відволікають по іншим «невідкладних справах» 🙂. Вирішив автоматизувати роботу з допомогою скрипта. Скрипт вирішив писати на PowerShell'е. Він має всі необхідні командлетти для роботи з об'єктами AD. Досвід роботи з командлеттамі був, наприклад тут і тут.
Вихідні дані були як файл Excel, де знаходилося штатний розклад компанії, люб'язно надане відділом кадрів. За допомогою фільтрів Excel, вибирав співробітників підрозділу. Цей список копіював на окремий лист. Виходив стовпець з прізвищами. Стовпець називався displayname.
Після цього даний лист зберігався, при збереженні «Тип файлу» вибирався «Текст Юнікод (* .txt)»
При спробі імпортувати цей файл, я виявив, що російські символи імпортуються з файлу в вигляді знаків питань. Та й в консолі при російській розкладці вводилися знаки питань. Вирішення цього питання знайшлося в інтернеті. Необхідно змінити кодову розкладку консолі командою chcp одна тисяча двісті п'ятьдесят одна і змінити шрифт на Lucida Console.
Після цих дій все чудово запрацювало.
Отже готовий файл зі списком прізвищ потрібного підрозділу містився в директорію Scripts на диску C: \. Файл usermove.txt
Отже нижче власне сам скрипт:
# Підключаємо модуль Powershell для роботи з AD
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
# Міняємо кодову сторінку, поміняти досить 1 раз
chcp тисячу двісті п'ятьдесят одна
# OU Куди переносимо користувачів
$ TargetOU = «OU = Подразделеніе_1, OU = Департамент_1, OU = CompanyName_Users, DC = office, DC = local»
#OU Звідки беремо користувачів
$ SourceOU = "OU = CompanyName_Users, DC = office, DC = local»
# Присвоюються шлях до файлу з ПІБ потрібних користувачів
$ Impfile = "C: \ Scripts \ usermove.txt»
# Створюємо масив $ users і завантажуємо в нього користувачів
$ Users = Import-CSV $ impFile
# Запускаємо цикл і обробляємо кожен рядок масиву.
foreach ($ user in $ users)
# Надаємо змінної $ dplname значення рядка з шпальти displayname масиву $ users
$ Dplname = $ user.displayname
# У масив $ usermove заносимо атрибути користувача, чиє коротке ім'я (атрибут name) зараз в змінній $ dplname.
# Пошук відбувається в OU, що містить ім'я занесене в змінну $ sourceOU. Глибина пошуку (задається параметром -SearchScope OneLevel) тільки поточна OU, все нижчестоящі OU не проглядається.
$ Usermove = get-aduser -f -SearchBase $ sourceOU -SearchScope OneLevel
# Роздруковуємо для перевірки змінні
write-host «Користувач $ dplname»
write-host
write-host «Перенесення $ usermove.distinguishedname»
write-host
# Перенесення користувача в потрібну OU
Move-ADObject -Identity $ usermove.distinguishedname -TargetPath $ targetOU
>
# Виводжу на екран для перевірки куди перемістити користувачів.
$ targetOU
Ось власне і все. У планах заповнення атрибутів користувачів таких як: