Выгрузка и загрузка пользователей AD посредством PowerShell.

Пару дней назад мне понадобилось выгрузить из Activ Directory в дальнейшем AD приличное кол-во пользователей для удобного редактирования и заполнения нужных граф в каждом пользователе. Делать это вручную крайне неудобно поэтому мной был написан небольшой скрипт который выгнружает пользователей в CSV файл , вносятся нужные корректировки и потом он загружается обратно.

Примеры файлов приведены ниже а также алгоритм работы.

Скрипт выгрузки Пользователей и параметров в файл users.csv

Get-ADUser -Property * -Filter {Name -like «*»} | Select-Object sAMAccountName,cn,name,givenName,sn,initials,mail,ipphone,mobile,physicalDeliveryOfficeName,title,userPrincipalName,C,co,l,postalCode,st,streetAddress,telephoneNumber,wWWHomePage | Export-csv -path «c:\temp\users.csv» -Append -Encoding UTF8 -Force

Если мы попытаемся открыть данный файл в Excel, то увидим следующую «картину» :

Для того что бы привести это в удобочитаемый вид необходимо выполнить следующий макрос во встроенной среде VisualBasic :

Columns(«A:A»).Select
Selection.TextToColumns Destination:=Range(«A1»), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
(20, 1)), TrailingMinusNumbers:=True

И на выходе мы получим следующее :

То есть все данные разместились по столбцам. Далее мы редактируем таблицу, прописываем пользователям должности кабинеты и другие данные после чего необходимо передать эти данные обратно в AD, но есть нюанс. Нюанс заключается в том что до Offie 365, предыдущие версии MS Office Excel сохраняют CSV файл с разделителем в виде «;» а в первоначальном виде это «,» но выход все же есть. Необходимо все в том же VisualBasic выполнить следующий макрос.

ActiveWorkbook.SaveAs Filename:=»C:\temp\users_exp.csv»,_
FileFormat:=xlCSV, CreateBackup:=False, Local:=False

Теперь наша таблица сохранна с нужными нам разделителями, но с кодировкой в кириллице, и во время загрузки даного файла в AD получаем «ероглифы». Это тоже не проблема. На просторах интернета был найден скрипт позволяющий поменять кодировку файла прямо в среде PowerShell. Текст скрипта ниже :

data = Import-Csv C:\temp\users_exp.сsv -Delimiter «`t» -Encoding BigEndianUnicode,

data | Export-Csv users_exp_utf8.csv -Encoding UTF8 -NoTypeInformation

Далее. Мы на финишной прямой. Осталось только загрузить наш отформатированный и перекодированный файл в AD . В этом нам поможет следующий скрипт.

Import-Csv «C:\temp\users_exp_utf8.csv» | ForEach-Object { $usam = $_.sAMAccountName $ugivenName = $_.givenName $usn = $_.sn $uinitials = $_.initials $umail = $_.mail $uip = $_.ipphone $umobile = $_.mobile $ucabinet = $_.physicalDeliveryOfficeName $utitle = $_.title $usp = $_.userPrincipalName $uco = $_.co $ul = $_.l $upostalCode=$_.postalCode $ust = $_.st $ustreetAddress = $_.streetAddress $utelephoneNumber = $_.telephoneNumber $uhp = $_.wWWHomePage` } Set-ADUser -Identity $usam -Replace @{ givenName=$ugivenName; sn=$usn; initials=$uinitials; mail=$umail; ipPhone=$uip; mobile=$umobile; physicalDeliveryOfficeName= $ucabinet; title=$utitle; userPrincipalName=$usp; co=$uco; l=$ul; postalCode=$upostalCode; st=$ust; streetAddress=$ustreetAddress; telephoneNumber=$utelephoneNumber; wWWHomePage=$uhp; }

Наслаждаемся проделанной работой.

P.S. Перед выполнением скриптов настоятельно рекомендую сделать BackUp данных. Скриптами вы пользуетесь на свой страх и риск. Автор ответственности не несёт.

Если вы обнаружили ошибку, выделите ее и нажмите Shift + Enter или кликни сюда что бы информировать нас. Спасибо !

Добавить комментарий

Ваш адрес email не будет опубликован.

14 − 4 =