none
Создание пользователей и OUв AD из txt или csv при помощи PowerShell RRS feed

  • Вопрос

  • Необходимо создать порядка 1500 пользователей из файла.
    Файл txt или csv типа:
    Фамилия,Имя,Отчество,Должность,Отдел,Организация,Адрес,Телефон

    Необходимо создать пользователей по следующему шаблону

    Имя: Имя
    Фамилия: Фамилия
    Выводимое имя: Фамилия Имя Отчество
    Номер телефона:Телефон

    Имя входа пользователя: FamiliaIO@domen.ru
    Должность: Должность
    Отдел: Отдел
    Организация: Организация

    И разместить их во вновь создаваемые OU
    CN=Выводимое имя,OU=Отдел,OU=Организация,DC=domen,DC=ru

    Может есть у кого готовый или кто-то может помочь в данном вопросе?

     


    • Изменено adsetn 5 февраля 2019 г. 7:33
    5 февраля 2019 г. 7:31

Ответы

  • поищите на просторах галерей в разделе ад

    или посмотрите справку по csvde

    ваша задача является одной из первых практических задач решаемых при изучении powershell поэтому вы без труда найдете пару сотен решений в интернете (в том числе и галереях, ссылка на которые приводилась выше)


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 5 февраля 2019 г. 7:51
    • Предложено в качестве ответа Svolotch 5 февраля 2019 г. 7:58
    • Помечено в качестве ответа KazunEditor 11 февраля 2019 г. 6:16
    5 февраля 2019 г. 7:49
    Модератор
  • Пробовал не помогает

    покажите скрипт

    вы проверяли не был ли пользователь уже перемещен?

    тут есть пример с вытягиванием dn вначале, а потом использование его как входной параметр для move-adobject

    по хорошему бы было еще проверку прикрутить 

    if ($user.distinguishedname -ne "CN=$($user.displayname),OU=$department,OU=..."){
       move-adobject -identity $user.distinguishedname -targetpath ...
    }


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 7 февраля 2019 г. 14:01
    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:10
    • Помечено в качестве ответа KazunEditor 11 февраля 2019 г. 6:16
    7 февраля 2019 г. 13:53
    Модератор

Все ответы

  • поищите на просторах галерей в разделе ад

    или посмотрите справку по csvde

    ваша задача является одной из первых практических задач решаемых при изучении powershell поэтому вы без труда найдете пару сотен решений в интернете (в том числе и галереях, ссылка на которые приводилась выше)


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 5 февраля 2019 г. 7:51
    • Предложено в качестве ответа Svolotch 5 февраля 2019 г. 7:58
    • Помечено в качестве ответа KazunEditor 11 февраля 2019 г. 6:16
    5 февраля 2019 г. 7:49
    Модератор
  • Уважаемый, если бы еще было время на изучение :(

    Поэтому и обратился к местным гуру за помощью.

    я вам ничего про изучение и не говорил (не призывал вас что либо изучать)

    скрипт о котором вы спрашиваете существует в сотнях реализаций 

    где можно найти я вам дал линк и указал раздел

    погуглить за вас?


    The opinion expressed by me is not an official position of Microsoft


    5 февраля 2019 г. 9:18
    Модератор
  • Там все не то, или я не так ищу :(
    81 результат 

    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:06
    5 февраля 2019 г. 11:36
    Модератор
  • Посмотрел. Ничего толкового не нашел.
    жаль, в таком случае придется ждать пока кто-то специально за вас сделает вашу задачу, или взять любой из 81 примеров, поправить пару параметров под себя, или делать 1500 учеток руками

    The opinion expressed by me is not an official position of Microsoft

    5 февраля 2019 г. 13:57
    Модератор
  • Присоединяюсь. Мне бы то-же такоже скрипт, только учетку вида familia_i@domen.com

    вам тоже 81 готовый вариант не подходит?

    чем конкретно вам предложенные варианты не подходят?

    вы тестировали, хотя бы 1 из предложенных?


    The opinion expressed by me is not an official position of Microsoft

    5 февраля 2019 г. 15:19
    Модератор

  • Вместо того чтобы посылать лучше помог! 

    я за вас уже даже погуглил и скинул линк на готовые решения, вам осталось взять одно из похожих, проверить как работает и исходя из этого задать вопрос

    чем я могу вам помочь еще, если попытка решения задачи не была предпринята?


    The opinion expressed by me is not an official position of Microsoft

    5 февраля 2019 г. 16:41
    Модератор
  • А что именно у вас не получается, может ошибка какая?
    5 февраля 2019 г. 20:50
  • Вот пример готового PowerShell скрипта по заведению учеток в AD из CSV  файла с транслитерацией. Думаю, не сложно будет его адаптировать.

    http://winitpro.ru/index.php/2018/03/02/new-aduser-sozdaem-polzovatelej-v-domene/


    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:06
    6 февраля 2019 г. 5:05
  • Как сделать транслит из фамилии, имени и сделать из этого учетку?

    То есть например Иванов Иван Иванович --> учетка IvanovII@domen.ru

    главный линк:

    результат 1

    результат 2

    результат 3

    ...


    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:07
    6 февраля 2019 г. 6:21
    Модератор
  • Что то не пойму. Скрипт вроде отрабатывает но пользователь не создается. сам скрипт

    ######################################

    Import-Module ActiveDirectory
    Import-CSV -Path ".\Users.csv"
    {New-ADuser -Name $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -OfficePhone $_.Phone -Title $_.Title -Department $_.Department -Company $_.Company -Street $_.Street -City $_.City -Path "ou=test,dc=test,dc=ru"
    -SamAccountName $TransName+$TransSurname -AccountPassword p@ssword -Enabled $true} 

    $TransName=Translit($_.Name)
    $TransSurname=Translit($_.Surname)
    $TransGivenName=Translit($_.GivenName)

    #сама функция транслитерации
    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
    }

    #########################################################

    При выполнении выходит 

    PS E:\testAD\2019.02.06_AD> E:\testAD\2019.02.06_AD\1.ps1

    Name;Surname;GivenName;DisplayName;Phone;Title;Department;Company;Street;City                                   
    -----------------------------------------------------------------------------                                   
    Шаронов;Владислав;Сергеевич;Шаронов Владислав Сергеевич;2223344;инженер;Отдел кадров;"ЗАО ""Рога и Копыта""";...
    New-ADuser -Name $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -OfficePhone $_
    .Phone -Title $_.Title -Department $_.Department -Company $_.Company -Street $_.Street -City $_.City -Path "ou=t
    est,dc=test,dc=ru"
    -SamAccountName $TransName+$TransSurname@test.ru -UserPrincipalName $TransName -AccountPassword p@ssword -Ena
    bled $true



    PS E:\testAD\2019.02.06_AD> 


    И всё. Что я делаю не так?


    похоже что потеряли во второй строке после import-csv...

    | foreach
      

    попробуйте более внимательно скопировать исходник

     а ещеу вас разделителями в csv выступает не запятая, а точка с запятой и это нужно указать коммандлету

    import-csv .\users.csv -delimiter ";"

    PS использовани кодблоков приветсвуется в данном форуме

    PSS функция должна быть сверху и вне foreach, преобразование из кирилицы должно быть в середине foreach и перед new-aduser


    The opinion expressed by me is not an official position of Microsoft


    6 февраля 2019 г. 7:04
    Модератор
  • Никак не могу прикрутить IpPhone 

    New-ADUser : Не удается найти параметр, соответствующий имени параметра "IPhone".
    E:\testAD\2019.02.06_AD\Good.ps1:100 знак:1
    + -IPhone $_.ipPhone`
    + ~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [New-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.NewADUser

    Какой параметр должен быть?

    6 февраля 2019 г. 12:56
  • Никак не могу прикрутить IpPhone 

    New-ADUser : Не удается найти параметр, соответствующий имени параметра "IPhone".
    E:\testAD\2019.02.06_AD\Good.ps1:100 знак:1
    + -IPhone $_.ipPhone`
    + ~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [New-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.NewADUser

    Какой параметр должен быть?

    iphone != ipphone

    посмотрите пример тут


    The opinion expressed by me is not an official position of Microsoft



    6 февраля 2019 г. 13:08
    Модератор
  • Из того что вы уже находили, должно получиться нечто подобное

    #сама функция транслитерации #~~ Должна находиться вначале а не в конце скрипта function 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} } return $outCHR } Import-Module ActiveDirectory Import-CSV -Path ".\Users.csv" -Delimiter ';' | foreach { #~~ Тут вы пропустили | Foreach и -Delimiter ';'
    #~~ Тут должны находиться ваши преобразования внутри Foreach (следующие 3 строки)
    $TransName=Translit($_.Name) $TransSurname=Translit($_.Surname) $TransGivenName=Translit($_.GivenName)
    #~~ Тут я ничего не менял, только преобразовал в более читабельный вид New-ADuser -Name $_.Name ` -Surname $_.Surname ` -GivenName $_.GivenName ` -DisplayName $_.DisplayName ` -OfficePhone $_.Phone ` -Title $_.Title ` -Department $_.Department ` -Company $_.Company ` -Street $_.Street ` -City $_.City ` -Path "ou=test,dc=test,dc=ru" ` -SamAccountName "$TransName`_$TransSurname" ` -AccountPassword "p@ssword" ` #~~ Если память мне не изменяет то тут должен быть SecureString (проверьте в примерах выще)) -Enabled $true
    #~~ По линку выше был пример как выставить нужный вам параметр
    if ($_.ipPhone){ #~~ В случае если параметр не задан в CSV то и в АД он не нужен Set-ADUser "$TransName`_$TransSurname" -Add @{"ipPhone" = $_.ipPhone}
    } } # End Foreach



    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 6 февраля 2019 г. 16:17
    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:08
    • Отменено предложение в качестве ответа Vector BCOModerator 14 февраля 2019 г. 7:22
    6 февраля 2019 г. 15:53
    Модератор
  • Это я все еще вчера сделал. Ip телефон не прописывался.

    Сейчас другой вопрос. Как создать OU из Названия отдела $_.Department и переместить туда вновь создаваемых пользователей.

    7 февраля 2019 г. 5:27
  • Это я все еще вчера сделал. Ip телефон не прописывался.

    Сейчас другой вопрос. Как создать OU из Названия отдела $_.Department и переместить туда вновь создаваемых пользователей.

    $Department = $_.department

    $SamAccountName = "$Transname`_$Transsurname" if (($Department) -and (! $(Get-ADOrganizationalUnit -Identity "OU=$Department,OU=CompanyUsers,DC=Company,DC=Com"))){ New-ADOrganizationalUnit -Name "$Department" -Path "OU=CompanyUsers,DC=Company,DC=Com" } Get-AdUser $SamAccountName | Move-ADObject -TargetPath "OU=Accounting,DC=Europe,DC=Fabrikam,DC=com"





    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 10 февраля 2019 г. 11:10 убрал targetserver
    7 февраля 2019 г. 7:07
    Модератор
  • OU на основе данных из файла csv $_.Department создает, но не перемещает типа пользователей. Уже весь мозг сломал.

    Как переместить пользователей в созданную OU на основе уже созданной у них записи Department  в свойствах учетной записи? 


    • Изменено adsetn 7 февраля 2019 г. 11:46
    7 февраля 2019 г. 11:46
  • OU на основе данных из файла csv $_.Department создает, но не перемещает типа пользователей. Уже весь мозг сломал.

    Как переместить пользователей в созданную OU на основе уже созданной у них записи Department  в свойствах учетной записи? 


    последняя команда предыдущего скрипта отрабатывает?

    The opinion expressed by me is not an official position of Microsoft

    7 февраля 2019 г. 11:52
    Модератор
  • Нет. Выдает ошибку

    Move-ADObject : Исходное и конечное расположение при перемещении между доменами совпадают. Следует использовать 
    операцию локального перемещения вместо междоменного

    7 февраля 2019 г. 12:11
  • Нет. Выдает ошибку

    Move-ADObject : Исходное и конечное расположение при перемещении между доменами совпадают. Следует использовать 
    операцию локального перемещения вместо междоменного

    ох, мой косяк при корировании уберите -targetserver ...

    The opinion expressed by me is not an official position of Microsoft

    7 февраля 2019 г. 13:01
    Модератор
  • Пробовал не помогает
    7 февраля 2019 г. 13:46
  • Пробовал не помогает

    покажите скрипт

    вы проверяли не был ли пользователь уже перемещен?

    тут есть пример с вытягиванием dn вначале, а потом использование его как входной параметр для move-adobject

    по хорошему бы было еще проверку прикрутить 

    if ($user.distinguishedname -ne "CN=$($user.displayname),OU=$department,OU=..."){
       move-adobject -identity $user.distinguishedname -targetpath ...
    }


    The opinion expressed by me is not an official position of Microsoft


    • Изменено Vector BCOModerator 7 февраля 2019 г. 14:01
    • Предложено в качестве ответа Vector BCOModerator 10 февраля 2019 г. 11:10
    • Помечено в качестве ответа KazunEditor 11 февраля 2019 г. 6:16
    7 февраля 2019 г. 13:53
    Модератор
  • Не проходит! Что я опять делаю не так? 

    #сама функция транслитерации
    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
    }
    
    Import-Module ActiveDirectory
    Import-CSV -Path "E:\Users.csv" -Delimiter ";" |ForEach  {
    $TransSurname=Translit($_.Surname)
    $TransGivenName=Translit($_.GivenName)
    $Initials=Translit($_.Initials)
    $ulogin=$TransSurname+$TransGivenName[0]+$Initials[0]
    $sam = $ulogin
    $domain = "@test.ru"
    
    New-ADuser -SamAccountName $sam `
    -UserPrincipalName $sam$domain `
    -Name $_.DisplayName`
    -Surname $_.Surname `
    -GivenName $_.GivenName `
    -DisplayName $_.DisplayName `
    -Office $_.Office `
    -OfficePhone $_.Phone `
    -Title $_.Title `
    -Department $_.Department `
    -Company $_.Company `
    -Street $_.Street `
    -City $_.City `
    -Path "OU=tranzit,DC=test,DC=ru" `
    -ChangePasswordAtLogon $true `
    -AccountPassword (ConvertTo-SecureString 'P@ssword!' -AsPlainText -Force) -Enabled $true
    
    $Department=$_.Department
    New-ADOrganizationalUnit -Name "$Department" -Path "OU=tranzit,DC=test,DC=ru"
    }
    
    if ($user.distinguishedname -ne "CN=$($user.displayname),OU=tranzit,DC=test,DC=ru"){
       move-adobject -identity $user.distinguishedname -targetpath "OU=$Department,OU=tranzit,DC=test,DC=ru"
    }

    Пользователей создает. ОУшки создает. Но не перемещает.
    • Изменено adsetn 14 февраля 2019 г. 6:07
    14 февраля 2019 г. 6:06
  • может и перемещает, но только последнего пользователя(если там условие совпадет)...

    кусок с перемещением вне цикла положили.

    $Department=$_.Department
    New-ADOrganizationalUnit -Name "$Department" -Path "OU=tranzit,DC=test,DC=ru"
    
    if ($user.distinguishedname -ne "CN=$($user.displayname),OU=tranzit,DC=test,DC=ru"){
       move-adobject -identity $user.distinguishedname -targetpath "OU=$Department,OU=tranzit,DC=test,DC=ru"
    }}

    14 февраля 2019 г. 6:40
  • может и перемещает, но только последнего пользователя(если там условие совпадет)...

    кусок с перемещением вне цикла положили.

    $Department=$_.Department
    New-ADOrganizationalUnit -Name "$Department" -Path "OU=tranzit,DC=test,DC=ru"
    
    if ($user.distinguishedname -ne "CN=$($user.displayname),OU=tranzit,DC=test,DC=ru"){
       move-adobject -identity $user.distinguishedname -targetpath "OU=$Department,OU=tranzit,DC=test,DC=ru"
    }}

    Увы нахождение If вне цикла не единственная причина. Переменная $User - пустая

    #сама функция транслитерации
    function 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
    }
    
    Import-Module ActiveDirectory
    Import-CSV -Path "E:\Users.csv" -Delimiter ";" |ForEach  {
        $TransSurname=Translit($_.Surname)
        $TransGivenName=Translit($_.GivenName)
        $Initials=Translit($_.Initials)
        $ulogin=$TransSurname+$TransGivenName[0]+$Initials[0]
        $sam = $ulogin
        $domain = "@test.ru"
    
        New-ADuser -SamAccountName $sam `
            -UserPrincipalName $sam$domain `
            -Name $_.DisplayName`
            -Surname $_.Surname `
            -GivenName $_.GivenName `
            -DisplayName $_.DisplayName `
            -Office $_.Office `
            -OfficePhone $_.Phone `
            -Title $_.Title `
            -Department $_.Department `
            -Company $_.Company `
            -Street $_.Street `
            -City $_.City `
            -Path "OU=tranzit,DC=test,DC=ru" `
            -ChangePasswordAtLogon $true `
            -AccountPassword (ConvertTo-SecureString 'P@ssword!' -AsPlainText -Force) -Enabled $true
    
        $Department=$_.Department
        New-ADOrganizationalUnit -Name "$Department" -Path "OU=tranzit,DC=test,DC=ru"
        #Получаем новосозданного пользюка
        $user = Get-ADUser $sam -Properties DistinguishedName, DisplayName
        Write-Host "User would be moved to 'CN=$($user.displayname),OU=$Department,OU=tranzit,DC=test,DC=ru'" -ForegroundColor Yellow
    
        # If должен находиться внутри цикла Foreach
        if ($user.distinguishedname -ne "CN=$($user.displayname),OU=$Department,OU=tranzit,DC=test,DC=ru"){
           move-adobject -identity $user.distinguishedname -targetpath "OU=$Department,OU=tranzit,DC=test,DC=ru"
        }
    }
    В дополнение (к автору) отступы по вложенности дают +10 к читаемости кода. В Powershell_ISE или Visual Studio Code (и многих других) детаются табом


    The opinion expressed by me is not an official position of Microsoft

    14 февраля 2019 г. 6:53
    Модератор
  • Спасибо
    14 февраля 2019 г. 10:04
  • Спасибо

    работает?

    The opinion expressed by me is not an official position of Microsoft

    14 февраля 2019 г. 10:06
    Модератор
  • Спасибо


    работает?

    The opinion expressed by me is not an official position of Microsoft


    Да. Только при выполнении скрипт ругается что идет попытка создать уже имеющийся OU, но это уже мелочи.

    14 февраля 2019 г. 10:15