Войти

Показать полную графическую версию : [решено] Импорт из csv в Active Directory и специфические атрибуты


AssGuard
28-05-2015, 17:28
Добрый день.

Есть задача по созданию нескольких сотен пользователей в AD на базе WinServer 2012R2.

Есть csv-файл со всеми данными, есть скрипт для powershell для импорта, но есть один нюанс: нужно заполнить 4 специфических поля KZIIN, KZCLASS, KZALTEMAIL, KZROLE, которые также есть в csv.

Суть проблемы: скрипт не заполняет специфические поля, хотя они в АД созданы, без строк по заполнению полей - все работает отлично.

Как пофиксить?


Import-Module ActiveDirectory
$pass = ConvertTo-SecureString -String "Password01" -AsPlainText -Force
$ou = "OU=8A,OU=8Classes,OU=Students,OU=KRG,DC=our,DC=domain,DC=KZ"
$dom = "krg"
$users = Import-CSV C:\Users\Admin\Desktop\users.csv

$users | ForEach-Object {
#Имя и фамилия латиницей
$gn = $_.GivenName_lat
$sn = $_.Surname_lat
#Класс
$class = $_.Class+$_.Liter
#Личная почта
$email = $_.altEmail
#Мобильный
$MobilePhone = $_.mobile
#Имя и фамилия кириллицией
$name = "$($_.GivenName) $($_.Surname)"
#ИИН
$iin = $_.IIN
#Имя
$givenname = $_.GivenName
#Фамилия
$surname = $_.Surname
#Грубо говоря корп.почта и имя пользователя АД
$upn = $_.Upn
#Создается имя пользователя вида Фамилия_И.поддомен
$gn1 = $gn.SubString(0,1)
$prefix = $sn+"_"+$gn1
$gn2 = $gn.SubString(0,1)
$prefix = $sn+"_"+$gn2
$sam = $prefix+"."+$dom
#Почта корпоративная
$mail = $upn
#Мобильный телефон
$phone = $MobilePhone
#Роль в системе
$role = "student"

if (Get-ADUser -Filter {UserPrincipalName -eq $upn})
{
Write-Host "User exists: $($upn)"
Set-ADUser -Server krg-srv-dc01 -Identity $sam -GivenName $givenname -Surname $surname -DisplayName $name -sAMAccountName $sam -OtherAttributes @{KZIIN=$iin;KZCLASS=$class;KZALTEMAIL=$email;KZROLE="student"}
return
}
else
{
New-ADUser -Server krg-srv-dc01 `
-UserPrincipalName $upn `
-GivenName $givenname `
-Surname $surname `
-Name $name `
-DisplayName $name `
-sAMAccountName $sam `
-EmailAddress $mail `
-OfficePhone $phone `
-Path $ou `
-AccountPassword $pass `
-PasswordNeverExpires $True `
-Enabled $True `
-ChangePasswordAtLogon $False `
-OtherAttributes @{'KZIIN'=$iin;'KZCLASS'=$class;'KZALTEMAIL'=$email;'KZROLE'=$role} `

}
}

Вот вывод консоли:

New-ADUser : A value for the attribute was not in the acceptable range of values
At line:1 char:1
+ New-ADUser -Server krg-srv-dc01 -UserPrincipalName 'Abeuov_A@krg.our.domain.kz' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Абеуов Алибе...is,DC=domain,DC=KZ:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8322,Microsoft.ActiveDirectory.Management.Commands.NewADUser

greg zakharov
28-05-2015, 17:46
Дык пишет, что "Значение атрибута не было в приемлемом диапазоне значений". Проверяйте количество параметров передаваемых командлету New-ADUser.

AssGuard
28-05-2015, 18:05
Добавлял и больше параметров, но без -OtherAttributes @{'KZIIN'=$iin;'KZCLASS'=$class;'KZALTEMAIL'=$email;'KZROLE'=$role} ` - работало. Добавляю именно эту строку - тупит.

Kazun
28-05-2015, 19:04
Посмотрите в схеме, какой синтаксис имеют атрибуты в схеме.

$filter = "ldapDisplayName -eq 'KZIIN' -or ldapDisplayName -eq 'KZCLASS' -or ldapDisplayName -eq 'KZALTEMAIL' -or ldapDisplayName -eq 'KZROLE'"
Get-ADObject -Filter $filter -SearchBase (Get-ADRootDSE).SchemaNamingContext -Properties attributeSyntax,oMSyntax

Syntaxes (https://technet.microsoft.com/en-us/library/cc961740.aspx) - и сверьте правильность

Так же на тестовом пользователе можно протестировать каждый атрибут в отдельности и выявить проблемный.

Set-ADUser user -Replace @{"KZIIN"='value'}

AssGuard
29-05-2015, 17:01
Благодарю, выяснил что в схеме было указано значение для атрибута KZIIN в 12 символов, а в csv - 11.
Вот если бы ошибки в лога powershell был более внятными...
Спасибо, тему можно закрыть.




© OSzone.net 2001-2012