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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Импорт из csv в Active Directory и специфические атрибуты (http://forum.oszone.net/showthread.php?t=300421)

AssGuard 28-05-2015 17:28 2512399

Импорт из csv в Active Directory и специфические атрибуты
 
Добрый день.

Есть задача по созданию нескольких сотен пользователей в 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 2512408

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

AssGuard 28-05-2015 18:05 2512415

Добавлял и больше параметров, но без
Код:

-OtherAttributes @{'KZIIN'=$iin;'KZCLASS'=$class;'KZALTEMAIL'=$email;'KZROLE'=$role} `
- работало. Добавляю именно эту строку - тупит.

Kazun 28-05-2015 19:04 2512459

Посмотрите в схеме, какой синтаксис имеют атрибуты в схеме.

Код:

$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 - и сверьте правильность

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

Код:

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

AssGuard 29-05-2015 17:01 2512825

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


Время: 13:25.

Время: 13:25.
© OSzone.net 2001-