![]() |
Создание пользователей AD с определенными атрибутами
Коллеги, всем привет.
Задача простая, но ломаю горову уже третий день... ошибка на ошибке и что не так делаю, хбз.. Вводные: Есть Excel файл со списком УЗ (ФИО Email и т.д.) по столбцам атрибуты данной учетки: 1. Срок ее действия [AccountExpires] 2. Адрес эл. почты подрядчика [mail] 3. Номер мобильного телефона [telephoneNumber] 4. Компания [Company] 5. Ответственный со стороны заказчика [Info] 6. Номер заявки в системе [Description] 7. Должность/роль в проекте [Title] 8. Полные фамилия, имя, отчество [DisplayName] 9. Проект или другое направление [Department] Нужно накидать скрипт PS, который возьмет из Excel список и создаст в AD нужных пользователей с нужными атрибутами, которые ранее заполнены в Excel. Возможно еще конвертить из Excel в *.cvs - если с помощью него проще, то и этот вариант рассматриваю Темы смотрел в данной ветке, есть подобные, но конкретно по моей ничего такого нет.... а собрать из всех тем единую так и не осилил.. Всем спасибо за помощь!!! |
Пример файла эксель - в студию
|
1. Пишем заготовку (один из вариантов)
1.1. Открываем ADUC, создаем пользователя (неважно какого, тестового), заполняем у него все те поля которые нужно будет заполнять у реальных пользователей, разворачиваем снизу "журнал windows powershell" и копируем оттуда несколько последних по времени команд в удобный редактор кода под пошик. 1.2. Разбираемся что в них, подменяем переменными то, что нужно будет тянуть из файла, пробуем создать второго тестового пользователя чисто из пошика, смотрим на ошибки, разбираемся с ними, с теми с которыми не получилось справиться - жалуемся сюда,. но это будет, по крайней мере, готовый на 90% скрипт, а не сферический конь в вакууме. 2. Задача как вытянуть данные из екселя или csv (кстати, чтобы не мучаться с дополнительным модулем - рекомендую все же csv), это уже будет плевая задача, по сравнению с первым пунктом, если сильно интересно побегать перед паровозом - можно поиграться с import-csv (или, если вариант с excel привлекательнее - с модулем ImportExcel https://github.com/dfinke/ImportExcel ). |
К сожалению, часто через N дней ломания головы и облазывания всего интернета почему-то результаты этих усилий полностью отсутствуют.
И исходный файл тоже сами нарисуйте. |
Вложений: 1
Цитата:
Привер файла приложил (заменить txt на csv), так же код на просторах интернета нашел, даже с транслитом в латиницу, но что то не так с ним: Скрытый текст
Import-Module activedirectory Import-Csv "C:\test.csv" | ForEach-Object { $upn = $_.SamAccountName + “@contoso.loc” $uname = $_.LastName + " " + $_.FirstName + " " + $_.Initials #переводим в транслит фамилию, имя и отчество $transLastName=Translit($_.LastName) $transFirstName=Translit($_.FirstName) $transInitials=Translit($_.Initials) $transuname = $transLastName + New-ADUser -Name $transuname ` -DisplayName $uname ` -GivenName $_.FirstName ` -Surname $_.LastName ` -Initials $_.Initials ` -OfficePhone $_.Phone ` -Department $_.Department ` -Title $_.JobTitle ` -UserPrincipalName $upn ` -SamAccountName $_.samAccountName ` -Path $_.OU ` -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true } #сама функция транслитерации function global:Translit { param([string]$inString) $Translit = @{ [char]'а' = "a" [char]'А' = "A" [char]'б' = "b" [char]'Б' = "B" [char]'в' = "v" [char]'В' = "V" [char]'г' = "g" [char]'Г' = "G" [char]'д' = "d" [char]'Д' = "D" [char]'е' = "e" [char]'Е' = "E" [char]'ё' = "yo" [char]'Ё' = "Yo" [char]'ж' = "zh" [char]'Ж' = "Zh" [char]'з' = "z" [char]'З' = "Z" [char]'и' = "i" [char]'И' = "I" [char]'й' = "j" [char]'Й' = "J" [char]'к' = "k" [char]'К' = "K" [char]'л' = "l" [char]'Л' = "L" [char]'м' = "m" [char]'М' = "M" [char]'н' = "n" [char]'Н' = "N" [char]'о' = "o" [char]'О' = "O" [char]'п' = "p" [char]'П' = "P" [char]'р' = "r" [char]'Р' = "R" [char]'с' = "s" [char]'С' = "S" [char]'т' = "t" [char]'Т' = "T" [char]'у' = "u" [char]'У' = "U" [char]'ф' = "f" [char]'Ф' = "F" [char]'х' = "h" [char]'Х' = "H" [char]'ц' = "c" [char]'Ц' = "C" [char]'ч' = "ch" [char]'Ч' = "Ch" [char]'ш' = "sh" [char]'Ш' = "Sh" [char]'щ' = "sch" [char]'Щ' = "Sch" [char]'ъ' = "" [char]'Ъ' = "" [char]'ы' = "y" [char]'Ы' = "Y" [char]'ь' = "" [char]'Ь' = "" [char]'э' = "e" [char]'Э' = "E" [char]'ю' = "yu" [char]'Ю' = "Yu" [char]'я' = "ya" [char]'Я' = "Ya" } $outCHR="" foreach ($CHR in $inCHR = $inString.ToCharArray()) { if ($Translit[$CHR] -cne $Null ) {$outCHR += $Translit[$CHR]} else {$outCHR += $CHR} } Write-Output $outCHR } Ошибка на переменной translite а где понять не могу... |
литеральные хэштейблы не чувствительны к регистру, поэтому ошибка на ключах в $Translit (а и А считается дублем), и нужно создавать .net-тип. $Translit = new-object System.Collections.Hashtable и добавлять в него как угодно, хоть в итерации по массивам строк, хоть копипастом.
|
Цитата:
Вот эта строка то ли недописана, то ли ещё что: Код:
$transuname = $transLastName + |
Цитата:
После добавления данных появляется ошибка Цитата:
Скрытый текст
строка:10 знак:1 + New-ADUser -Name $transuname ` + ~~~~~~~~~~ Непредвиденная лексема "New-ADUser" в выражении или операторе. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken Цитата:
|
Попробуйте
Код:
New-ADUser -Name "$transuname" |
Цитата:
ps "DC=domen" - специально изменил, конф.инфа ))) Скрытый текст
Проверка наличия прав администратора... Права администратора есть – продолжить скрипт... New-ADUser : Отказано в доступе строка:18 знак:1 + New-ADUser -Name "$transuname" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (CN=Ole Voron Se...DC=domen,DC=ru:String) [New-ADUser], UnauthorizedAccessException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.UnauthorizedAccessException,Microsoft.ActiveDirectory.Management.Comman ds.NewADUser -DisplayName : Имя "-DisplayName" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а такж е наличие и правильность пути, после чего повторите попытку. строка:19 знак:1 + -DisplayName $uname ` + ~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (-DisplayName:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException |
Все переменные в команде New-ADUser, где могут быть пробелы, заключите в двойные кавычки.
Если вы запускаете скрипт на контроллере домена, запускайте его с повышенными привилегиями, даже если у вашей учётки есть права. |
Время: 11:57. |
Время: 11:57.
© OSzone.net 2001-