Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создание пользователей AD с определенными атрибутами (http://forum.oszone.net/showthread.php?t=353090)

pernatiy05 20-02-2023 08:55 3003673

Создание пользователей 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 - если с помощью него проще, то и этот вариант рассматриваю


Темы смотрел в данной ветке, есть подобные, но конкретно по моей ничего такого нет.... а собрать из всех тем единую так и не осилил..

Всем спасибо за помощь!!!

DJ Mogarych 20-02-2023 13:35 3003687

Пример файла эксель - в студию

Elven 22-02-2023 15:31 3003878

1. Пишем заготовку (один из вариантов)
1.1. Открываем ADUC, создаем пользователя (неважно какого, тестового), заполняем у него все те поля которые нужно будет заполнять у реальных пользователей, разворачиваем снизу "журнал windows powershell" и копируем оттуда несколько последних по времени команд в удобный редактор кода под пошик.
1.2. Разбираемся что в них, подменяем переменными то, что нужно будет тянуть из файла, пробуем создать второго тестового пользователя чисто из пошика, смотрим на ошибки, разбираемся с ними, с теми с которыми не получилось справиться - жалуемся сюда,.
но это будет, по крайней мере, готовый на 90% скрипт, а не сферический конь в вакууме.
2. Задача как вытянуть данные из екселя или csv (кстати, чтобы не мучаться с дополнительным модулем - рекомендую все же csv), это уже будет плевая задача, по сравнению с первым пунктом, если сильно интересно побегать перед паровозом - можно поиграться с import-csv (или, если вариант с excel привлекательнее - с модулем ImportExcel https://github.com/dfinke/ImportExcel ).

DJ Mogarych 22-02-2023 16:42 3003889

К сожалению, часто через N дней ломания головы и облазывания всего интернета почему-то результаты этих усилий полностью отсутствуют.
И исходный файл тоже сами нарисуйте.

pernatiy05 28-02-2023 04:42 3004275

Вложений: 1
Цитата:

Цитата DJ Mogarych
К сожалению, часто через N дней ломания головы и облазывания всего интернета почему-то результаты этих усилий полностью отсутствуют.
И исходный файл тоже сами нарисуйте. »

Сори за молчание, был командировке, не мог много времени уделить теме:
Привер файла приложил (заменить 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 а где понять не могу...

Sham 28-02-2023 07:28 3004279

литеральные хэштейблы не чувствительны к регистру, поэтому ошибка на ключах в $Translit (а и А считается дублем), и нужно создавать .net-тип. $Translit = new-object System.Collections.Hashtable и добавлять в него как угодно, хоть в итерации по массивам строк, хоть копипастом.

DJ Mogarych 28-02-2023 09:40 3004287

Цитата:

Цитата pernatiy05
Ошибка на переменной translite »

Какая ошибка?

Вот эта строка то ли недописана, то ли ещё что:
Код:

$transuname = $transLastName +

pernatiy05 28-02-2023 09:54 3004288

Цитата:

Цитата DJ Mogarych
$transuname = $transLastName + »

Да, тут разобрался, не хватало " " + $transFirstName + " " + $transInitials ` - что бы все 3 столбца перевел в транслит.

После добавления данных появляется ошибка
Цитата:

Цитата DJ Mogarych
Какая ошибка? »

Скрытый текст

строка:10 знак:1
+ New-ADUser -Name $transuname `
+ ~~~~~~~~~~
Непредвиденная лексема "New-ADUser" в выражении или операторе.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken


Цитата:

Цитата Sham
литеральные хэштейблы не чувствительны к регистру, поэтому ошибка на ключах в $Translit (а и А считается дублем), и нужно создавать .net-тип. $Translit = new-object System.Collections.Hashtable и добавлять в него как угодно, хоть в итерации по массивам строк, хоть копипастом. »

Примерно понимаю про что вы говорите, но PS только только начинаю осваивать, так что пока это дремучий лес для меня

DJ Mogarych 28-02-2023 10:09 3004292

Попробуйте
Код:

New-ADUser -Name "$transuname"

pernatiy05 28-02-2023 10:28 3004294

Цитата:

Цитата DJ Mogarych
New-ADUser -Name "$transuname" »

Заменил, + добавил проверку админских прав, Ошибка другая, но права у меня 100% есть
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

DJ Mogarych 28-02-2023 10:35 3004295

Все переменные в команде New-ADUser, где могут быть пробелы, заключите в двойные кавычки.
Если вы запускаете скрипт на контроллере домена, запускайте его с повышенными привилегиями, даже если у вашей учётки есть права.


Время: 11:57.

Время: 11:57.
© OSzone.net 2001-