PowerShell - Создание пользователей AD с определенными атрибутами

Аватара пользователя
pernatiy05

PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение pernatiy05 »

Коллеги, всем привет.



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

Вводные:

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





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



Всем спасибо за помощь!!!
Аватара пользователя
Elven

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение Elven »

1. Пишем заготовку (один из вариантов)

1.1. Открываем ADUC, создаем пользователя (неважно какого, тестового), заполняем у него все те поля которые нужно будет заполнять у реальных пользователей, разворачиваем снизу "журнал windows powershell" и копируем оттуда несколько последних по времени команд в удобный редактор кода под пошик.

1.2. Разбираемся что в них, подменяем переменными то, что нужно будет тянуть из файла, пробуем создать второго тестового пользователя чисто из пошика, смотрим на ошибки, разбираемся с ними, с теми с которыми не получилось справиться - жалуемся сюда,.

но это будет, по крайней мере, готовый на 90% скрипт, а не сферический конь в вакууме.

2. Задача как вытянуть данные из екселя или csv (кстати, чтобы не мучаться с дополнительным модулем - рекомендую все же csv), это уже будет плевая задача, по сравнению с первым пунктом, если сильно интересно побегать перед паровозом - можно поиграться с import-csv (или, если вариант с excel привлекательнее - с модулем ImportExcel
https://github.com/dfinke/ImportExcel
).
Аватара пользователя
DJ Mogarych

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение DJ Mogarych »

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

И исходный файл тоже сами нарисуйте.
Аватара пользователя
pernatiy05

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение pernatiy05 »

Цитата DJ Mogarych:



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

И исходный файл тоже сами нарисуйте.
PowerShell - Создание пользователей AD с определенными атрибутами




Сори за молчание, был командировке, не мог много времени уделить теме:

Привер файла приложил (
заменить txt на csv
), так же код на просторах интернета нашел, даже с транслитом в латиницу, но что то не так с ним:



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

[spoiler]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

}[/spoiler]






Ошибка на переменной translite а где понять не могу...
Аватара пользователя
Sham

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение Sham »

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

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение DJ Mogarych »

Цитата pernatiy05:



Ошибка на переменной translite
PowerShell - Создание пользователей AD с определенными атрибутами




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



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



Код:

Код: Выделить всё

$transuname = $transLastName +
Аватара пользователя
pernatiy05

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение pernatiy05 »

Цитата DJ Mogarych:



$transuname = $transLastName +
PowerShell - Создание пользователей AD с определенными атрибутами




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



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


Цитата DJ Mogarych:



Какая ошибка?
PowerShell - Создание пользователей AD с определенными атрибутами







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

[spoiler]строка:10 знак:1

+ New-ADUser -Name $transuname `

+ ~~~~~~~~~~

Непредвиденная лексема "New-ADUser" в выражении или операторе.

+ CategoryInfo : ParserError: (Изображение [], ParentContainsErrorRecordException

+ FullyQualifiedErrorId : UnexpectedToken[/spoiler]







Цитата Sham:



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




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

Re: PowerShell - Создание пользователей AD с определенными атрибутами

Сообщение pernatiy05 »

Цитата DJ Mogarych:



New-ADUser -Name "$transuname"
PowerShell - Создание пользователей AD с определенными атрибутами




Заменил, + добавил проверку админских прав, Ошибка другая, но права у меня 100% есть

ps "DC=domen" - специально изменил, конф.инфа )))



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

[spoiler]Проверка наличия прав администратора...

Права администратора есть – продолжить скрипт...

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[/spoiler]
Ответить

Вернуться в «Скриптовые языки администрирования Windows»