Скрипт для создания пользователей windows server

Автоматизация создания учетных записей с помощью PowerShell

В самом простом варианте создание новой учетной записи пользователя занимает примерно пару минут. Открываем оснастку «Active Directory – Users and Computers», заходим в нужное подразделение (OU), в меню выбираем Создать — Пользователь, вводим имя пользователя и пароль. Все, учетка готова, можно работать.
А теперь представьте, что таким образом вам надо создать не одну, а скажем 50 учетных записей, и делать это регулярно.


Поскольку наврядли кому-то нравится проводить время, тупо набирая учетные данные пользователей, то делаем простой вывод — процесс заведения пользователей надо автоматизировать. И поможет нам в этом PowerShell.

Итак, представим, что нам нужно срочно создать 50 однотипных учетных записей. Пишем вот такой скрипт:

$org=″OU=Students,DC=contoso,DC=com″ 
$username=″student″
$count=1..50
foreach ($i in $count) 
{ New-AdUser -Name $username$i -Path $org -passThru }

создание однотипных учетных записей

Запускаем скрипт, и в подразделении Students создается 50 пользователей с именами student1-student50. По умолчанию учетки создаются отключенными, и пользователи все равно будут вынуждены к вам обращаться для их активации. Попробуем этого избежать:

$org=″OU=Students,DC=contoso,DC=com″
$username=″student″
$count=1..50
foreach ($i in $count)
{ New-AdUser -Name $username$i -Path $org -Enabled $True -ChangePasswordAtLogon $true  `
-AccountPassword (ConvertTo-SecureString «p@$$w0rd» -AsPlainText -force) -passThru }

Здесь создаем учетные записи уже активными и задаем p@$$w0rd как  пароль по умолчанию, а также указываем сменить его при первом входе в систему. Чтобы не передавать пароль в открытом виде, используем командлет ConvertTo-SecureString, который  переводит текстовую строку в защищенный формат

Теперь сделаем наш скрипт чуть более гибким. Используя командлет Read-Host заставим наш скрипт запрашивать имя  и количество пользователей:

$org=″OU=Students,DC=contoso,DC=com″
$username=Read-Host ″Enter name″
$number=Read-Host ″Enter number″

$count=1..$number
foreach ($i in $count)
{ New-AdUser -Name $username$i -Path $org -Enabled $True -ChangePasswordAtLogon $true `
-AccountPassword (ConvertTo-SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru }

задаем имя и количество пользователей

Учетные записи созданы, пользователи могут заходить в систему и работать. Теперь их надо настроить — добавить в группы безопасности, прописать домашний каталог, сценарии входа и т.п. Сделать это можно с помощью шаблона. Проще говоря, создаем шаблонную учетную запись, полностью настраиваем ее, а затем делаем с нее нужное количество копий с помощью параметра -Instance :

$template = Get-AdUser -Identity ″student″
$org=″OU=Students,DC=contoso,DC=com″  
$username=Read-Host ″Enter name″
$number=Read-Host ″Enter number″

$count=1..$number
foreach ($i in $count)
{ New-AdUser -Name $username$i -UserPrincipalName $username$i -Path $org -Instance `
$template -Enabled $True -ChangePasswordAtLogon $true `
-AccountPassword (ConvertTo-SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru }

копирование пользователя

Еще один способ автоматизировать создание учетных записей — импортировать их из CSV-файла. Этот способ подойдет в том случае, если вам предоставили список пользователей, и им надо завести учетные записи в соответствии с этим списком. Как правило, подобные списки создаются в Excel в виде таблицы со столбцами Имя, Должность, Отдел и т.п., примерно такого вида:

список пользователей

Наша задача — сохранить его в формате CSV и затем указать в скрипте с помощью командлета Import-CSV. Если ваш CSV-файл содержит все необходимые столбцы, то New-ADUser автоматически свяжет их с правильными атрибутами пользователя :

$csv = Import-CSV -Path ″C:scriptsusers.csv″
$csv | New-AdUser  -Path $org -Enabled $True -ChangePasswordAtLogon $true `
-AccountPassword (ConvertTo-SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru

импорт из файла CSV

Таким образом можно импортировать сотни новых пользователей за несколько секунд, но есть в этом методе и подводные камни:

  • Названия столбцов должны полностью совпадать с названиями атрибутов пользователя, например Name (Имя), Organization (Организация), Title (должность), иначе ничего не получиться. Полный список атрибутов можно посмотреть здесь.
  • В таблице обязательно нужно указать SamAccountName, в противном случае будет выдана ошибка о том, что учетная запись уже существует.
  • Если атрибуты задаватьть в русской раскладке, как в нашем примере, то могут возникнуть проблемы с кодировкой. В решении этой проблемы мне помогло извлечение содержимго CSV-файла с помощью командлета Get-Content и сохранение его в другой CSV-файл: Get-Content users.csv >> users1.csv. После этого все русскоязычные атрибуты стали отображаться нормально.

В заключение несколько важных моментов:

Для запуска командлета New-ADUser необходимо предварительно импортировать модуль Active Directory для PowerShell. Делается это командой Import-Module ActiveDirectory, можно просто вставить эту строку в скрипт. Исключение составляет случай, когда вы запускаете скрипт из специальной оснастки «Модуль Active Directory для Windows PowerShell».

Модуль ActiveDirectory доступен на серверах под управлением Windows Server 2008R2/2012, а также на рабочих станциях Windows 7/8 c установленным пакетом администрирования RSAT.

Для работы модуля ActiveDirectory необходима веб-служба Active Directory (ADWS), предоставляющая веб-интерфейс для доступа к службе каталогов. По умолчанию эта служба устанавливается автоматически при добавлении ролей сервера AD DS и AD LDS на серверах под управлением Windows Server 2008R2 и выше. Для Windows Server 20032008 эту службу можно установить отдельно, скачав отсюда.

В этой статье мы рассмотрим, как создать (добавить) нового пользователей в домен Active Directory. Вы можете создать учетные записи пользователей в Active Directory с помощью графических mmc оснасток Active Directory Users and Computers (
dsa.msc
)/ AD Administrative Center (
dsac.msc
) или с помощью скриптов PowerShell.

Содержание:

  • Как создать нового пользователя в домене Active Directory?
  • New-ADUser: создать учетную запись пользователя с помощью PowerShell
  • PowerShell: Массовое создание новых пользователей в AD по CSV файлу

Как создать нового пользователя в домене Active Directory?

Самый простой способ создания нового доменного пользователе в Active Directory – воспользоваться графической mmc консоль ADUC.

  1. Запустите консоль Active Directory Users and Computers, выполнив команду
    dsa.msc
    ;
  2. Выберите контейнер (Organizational Unit, OU) Active Directory, в котором вы хотите создать нового пользователя. Щелкните по нему правой кнопкой и выберите New -> User; создать нового пользователя Active Directory вручную

    Для создания пользователей в домене ваша учетная запись должна состоять в группе администраторов домена, Account Operators или вы можете делегировать права на создание пользователей другим пользователям/группам.

  3. Укажите имя, фамилию и инициалы пользователя, выберите его userPrincipalName (имя входа пользователя) и sAMAccountName, нажмите Next;укажите имя и фаамилию нового пользователя AD и имя для входа в Windows
  4. Затем задайте пароль пользователя. На этой форме вы можете дополнительно включить для пользователя следующие опции атрибута UserAccountControl:задать пароль нового пользователя Active Directory
    User must change password at next logon — пользователь при первом входе должен будет изменить пароль;
    User cannot change password — пользователь не сможет самостоятельно изменить свой пароль (смена/сброс пароля может быть выполнена только администратором);
    Password never expires — срок действия пароля пользователя никогда не истечет (если эта опция не включена, тогда срок действия пароля пользователя определяется политикой паролей Active Directory);
    Account is disabled — учетная запись пользователя в домене отключена и не может использоваться для входа.
  5. Найдите пользователя в консоли ADUC и откройте его свойства. Здесь вы можете задать дополнительные атрибуты пользователя: номер телефон, адрес, описание, должность, компанию (и т.д.), добавить его в группы AD, и изменить другие атрибуты на вкладке Attribute Editor.новый пользователеь в домене active directory

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

скопировать пользователя AD

Щелкните по пользователю и выберите Copy. При копировании пользователя ему будет скопирован список групп, адрес (кроме улицы), настройки атрибута useraccountcontrol, параметры организации и ряд других атрибутов.

New-ADUser: создать учетную запись пользователя с помощью PowerShell

Выше мы показали, как вручную создать пользователя в домене AD с помощью графической консоли ADUC. Если вы постоянно создаете в домене новых пользователей, то гораздо удобнее автоматизировать этот процесс с помощью PowerShell.

Для создания учетных записей пользователей в AD можно использовать командлет New-ADUser из модуля Active Directory Module for Windows PowerShell.

Полный синтаксис командлета New-ADUser можно получить с помощью команды:

Get-Command New-ADUser –Syntax

New-ADUser - синтаксис

В минимальной версии для создания новой учетной записи пользователя в AD достаточно указать только его имя:
New-ADUser testuser1

Создаем нового пользователя в домене Active Directory

Как вы видите, новая учетная запись пользователя была создана в контейнере Users. По умолчанию этот пользователь отключен. Чтобы использовать эту учетную запись, ее нужно включить (командлет Enable-ADAccount), задать пароль (командлет Set-ADAccountPassword) и настроить другие атрибуты (по необходимости).

Чтобы создать новую учетную запись в определенном контейнере (OU) домена с паролем и сразу включить ее, воспользуйтесь такой командой:

New-ADUser -Name "Test User2" -GivenName "Test" -Surname "User2" -SamAccountName "testuser2" -UserPrincipalName "[email protected]" -Path "OU=Users,OU=Accounts,OU=SPB,DC=winitpro,DC=loc" -AccountPassword(Read-Host -AsSecureString "Input Password") -Enabled $true

Команда предложит сразу указать пароль нового пользователя (пароль передается в защищенном виде).

Примечание. Пароль пользователя должен соответствовать доменным политикам безопасности паролей по длине, сложности и т.д, иначе командлет вернет ошибку: New-ADUser : The password does not meet the length, complexity, or history requirement of the domain. Вы можете использовать готовый скрипт PowerShell для генерации сложного пароля для каждого пользователя.

Вы можете получить информацию о созданном пользователе домена с помощью командлета Get-ADUser:

Get-ADUser testuser2

PowerShell: Массовое создание новых пользователей в AD по CSV файлу

Вы можете использовать PowerShell скрипты для массового заведения пользователей в домене Active Directory. Рассмотрим несколько простой скрипт для создания учетных записей пользователей по списку из CSV файла.

Заполните необходимые параметры пользователей в формате CSV (Excel) файла. Например, мой Excel файл с пользователями состоит из 9 колонок и имеет следующий формат шапки:

FirstName;LastName;Initials;SamAccountName;Phone;Department;JobTitle;Password;OU

Заполните данные пользователей и сохраните Exсel файл с в формате CSV c запятыми, в качестве разделителей. Кодировка файла должна быть обязательно UTF-8 (важно!).

Вы можете обращаться к значениям в ячейках Excel файла напрямую из PowerShell. Для упрощения кода скрипта в этом примере я использую плоский CSV файл.

список пользователей в excel

Теперь вы можете импортировать данный CSV файл (new_ad_users2.csv) и создать в домене новых пользователей. Код готового PowerShell скрипта представлен ниже:

csv файл со списком пользвоателей, которых нужно создать в AD

Примечание.

  • Имя OU, в котором нужно создать пользователя указывается в формате distinguishedName (
    "OU=Users,OU=SPB,OU=RU,DC=winitpro,DC=ru"
    ). Значение нужно взят в двойные кавычки (т.к. строка содежрит запятые);
  • Имя пользователя в домене мы будем заводить на английском языке. Для транслитерации имен и фамилий пользователей с кириллицы в латиницу мы добавили в скрипт отдельную функцию Translit;
  • Если в качестве разделителя CSV файла используется “;”, в командлет Import-Csv нужно добавить аргумент
    -delimiter ";"
    . Проверьте, какой разделитель (делиметер) используется в вашей Windows по-умолчанию (команда
    (Get-Culture).TextInfo.ListSeparator)
    . Если системный разделитель отличается от разделителя в CSV файле, его нужно указать в параметре
    –Delimiter
    ;
  • Скрипт проверяет, существует ли пользователь в домене. Если в домене уже есть такая учетная запись, появляется предупреждение и предлагается ввести уникальный sAMAccountName (вы можете добавить порядковый номер в конце имени учетной записи).

$domain=“@winitpro.loc”
Import-Module activedirectory
Import-Csv "C:psnew_ad_users2.csv" | ForEach-Object {
$userSAM=$_.SamAccountName

if (@(Get-ADUser -Filter "SamAccountName -eq '$($_.SamAccountName)'").Count -ne 0) {
Add-Type -AssemblyName Microsoft.VisualBasic
$userSAM = [Microsoft.VisualBasic.Interaction]::InputBox("Пользователь с именем $_.SamAccountName уже существует", 'Укажите новое имя пользователя', $_.SamAccountName)
}
$upn = $userSAM + $domain
$uname = $_.LastName + " " + $_.FirstName + " " + $_.Initials
#переводим в транслит фамилию, имя и отчество
$transLastName=Translit($_.LastName)
$transFirstName=Translit($_.FirstName)
$transInitials=Translit($_.Initials)
$transuname = $transLastName + " " + $transFirstName + " " + $transInitials
New-ADUser -Name $transuname `
-DisplayName $uname `
-GivenName $_.FirstName `
-Surname $_.LastName `
-Initials $_.Initials `
-OfficePhone $_.Phone `
-Department $_.Department `
-Title $_.JobTitle `
-UserPrincipalName $upn `
-SamAccountName $userSAM `
-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
}

powershell скрипт для массового заведения пользователей из CSV файла в домене Active Directory

После выполнения скрипта, откройте консоль ADUC, разверните указанный контейнер и убедитесь, что в AD появились новые учетки пользователей (отследить создание учетных записей в AD можно так: Получение списка учетных записей AD, созданных за последние 24 часа.)

новый пользователь в AD

Вы сразу можете добавить учетные записи в нужные группы AD с помощью командлета Add-AdGroupMember. Для этого нужно немного модифицировать скрипт, добавив в цикле строку:

Add-AdGroupMember -Identity AllowPublicInet -Members $userSAM

Также вы можете установить фотографию пользователя в AD, чтобы она отображалась в Outlook и Lync:

Set-ADUser $userSAM -Replace @{thumbnailPhoto=([byte[]](Get-Content "C:psuser1_photo.jpg" -Encoding byte))}

Table of Contents

  • Overview
  • Creating A User
  • Creating Batch Users
    • Creating a basic CSV File
    • Creating Users
    • Creating a CSV With Password and Email
    • Creating Users with Passwords and Email
  • Reference
  • Other Languages

Overview

Implemented on Windows Server 2008 R2 the PowerShell module simplifies and administrative or repetitive tasks made by administrators.

Implemented on the module, New-ADUser is used to created new users and objects on
Active Directory Domain Services. This cmdlet can be used alone or using pipes as part of a script to help on repetitive tasks.  

Before using the cmdlets is necessary to import the administrative modules on PowerShell. Run the cmdlet: 

Import-Module ActiveDirectory 

In this article all commands were run on a domain controller running Windows Server 2012 R2.

Creating A User 

To create a user with the minimal information required, just set the Name parameter and UserPrincipalName. Running the cmdlet

New-ADUser -Path ‘OU=Home Users,dc=home,dc=intranet’ -Name User17.U17 -UserPrincipalName User17.U17@home.intranet

The result is a user named User17 created OU Home Users. By default the user is created disabled and no password set. 

This user has been created without information about name or a displayname , we can add more information using the parameters of the cmdlet. To create a user with the information of name and surname populated just run. 

New-ADUser -Path ‘OU=Home Users,dc=home,dc=intranet’ -Name User18.U18 -UserPrincipalName User18.U18@home.intranet -Surname U18 -GivenName User18 -DisplayName «User18 U18»

In the properties of the new user can verify the configured name

Creating Batch Users

The cmdlet also accepts lists of pipes from variable or other cmdlets, that helps expands its functionality. In this case we can use the cmdlet to create a list of users using a CSV input file. 

Excel 2013 was used to create and format the list of users. 

Creating a basic CSV File

The first batch of users will be created with the minimum necessary, the CSV file to create users in this following format

The end result will be users with  DisplayName, UPN and Name properties set.

Creating Users 

To create the users above first import the list to a session variable in PowerShell.
Copy the file to server, and execute cmdlet 

$u01 = Import-Csv Usuarios.csv

Then run New-ADUser using the variable, 

$u | ForEach-Object { New-ADUser -Path ‘OU=Home Users,dc=home,dc=intranet’ -Name $_.Name -UserPrincipalName $_.UPN -DisplayName $_.DN  }

The user should be create 

Creating a CSV With Password and Email 

This cmdlet can also be used to enable users after creating and configuring the password. 

The user’s password was generated directly in Excel with the formula:

=CHAR(RANDBETWEEN(65;90))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))
&CHAR(RANDBETWEEN(65;90))&RANDBETWEEN(1000;9999)&CHAR(RANDBETWEEN(42;43))

The final file with the email fields, names and passwords set should look like the following

Creating Users with Passwords and Email 

Copy the new file to the server and import it into a new variable

$u2 = Import-Csv Usuario2.csv

To create this list of users execute the following:

$u2 | ForEach-Object { New-ADUser -Path ‘OU=Home Users,dc=home,dc=intranet’ -Name $_.Name -Surname $_.SurN -GivenName $_.FirstN -UserPrincipalName $_.UPN -DisplayName $_.DN -EmailAddress
$_.SMTP -AccountPassword (ConvertTo-SecureString -AsPlainText $_.Pass -Force) -Enabled $True}

The new list of enabled user is created and the password defined 

     

Reference

  • http://technet.microsoft.com/en-us/library/ee617253.aspx

Other Languages

  • http://social.technet.microsoft.com/wiki/pt-br/contents/articles/25093.criando-usuarios-em-lote-no-active-directory-usando-powershell.aspx

The easiest way to create a new user in an Active Directory domain is using the Active Directory Users and Computers MMC snap-in. However, what if you need to create multiple user accounts in bulk, or ADUC is not available for some reason? In this article, we explain several ways to create Active Directory user accounts with PowerShell using the New-ADUser cmdlet.

Create New User Accounts using the New-ADUser Cmdlet

So what is the PowerShell cmdlet used to create user objects? It’s the New-ADUser cmdlet, which is included in the Active Directory PowerShell module built into Microsoft Windows Server 2008R2/2012 and above. Therefore, the first thing we need to do is enable the AD module:

Import-Module ActiveDirectory

Now let’s take a closer look at cmdlet New-ADUser. We can get its full syntax by running the following command:

Get-Command New-ADUser –Syntax

Create New User Accounts in Active Directory using the New-ADUser Cmdlet

When you know the syntax, it’s easy to add users to Active Directory:

New-ADUser B.Johnson

Now let’s check whether the user was added successfully by listing all Active Directory users using the following script:

Get-ADUser -Filter * -Properties samAccountName | select samAccountName

Create New User Accounts using the New-ADUser Cmdlet Check

There it is, the last one in the list!

Create a New Active Directory User Account with Password

Accounts are created with the following default properties:

  • Account is created in the “Users” container.
  • Account is disabled.
  • Account is a member of Domain Users group.
  • No password is set.
  • User must reset the password at the first logon.

Therefore, to make a new account that’s actually usable, we need to enable it using the Enable-ADAccount cmdlet and give it a password using the Set-ADAccountPassword cmdlet.

So let’s create a new account with the following attributes:

  • Name – Jack Robinson
  • Given Name – Jack
  • Surname – Robinson
  • Account Name – J.Robinson
  • User Principal Name – J.Robinson@enterprise.com
  • Path address – “OU=Managers,DC=enterprise,DC=com”
  • Password Input
  • Status – Enabled

Here’s the script we’ll use:

New-ADUser -Name "Jack Robinson" -GivenName "Jack" -Surname "Robinson" -SamAccountName "J.Robinson" -UserPrincipalName "J.Robinson@enterprise.com" -Path "OU=Managers,DC=enterprise,DC=com" -AccountPassword(Read-Host -AsSecureString "Input Password") -Enabled $true

The Read-Host parameter will ask you to input new password. Note that the password should meet the length, complexity and history requirements of your domain security policy.

Now let’s take a look at the results by running the following cmdlet:

Get-ADUser J.Robinson -Properties CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet  | Select CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet

Create a New Active Directory User Account with Password

Create AD Users in Bulk with a PowerShell Script

Now, let’s make our task a little bit harder and create ten similar Active Directory accounts in bulk, for example, for our company’s IT class, and set a default password (P@ssw0rd) for each of them. To send the default password in a protected state, we must use the ConvertTo-SecureString parameter. Here’s the script to use:

$path="OU=IT,DC=enterprise,DC=com"
$username="ITclassuser"
$count=1..10
foreach ($i in $count)
{ New-AdUser -Name $username$i -Path $path -Enabled $True -ChangePasswordAtLogon $true  `

-AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -passThru }

Create Active Directory Users in Bulk with a PowerShell Script

Now let’s make our script more flexible by adding the Read-Host parameter, which will ask for the name and number of users:

$path="OU=IT,DC=enterprise,DC=com"
$username=Read-Host "Enter name"
$n=Read-Host "Enter Number"
$count=1..$n
foreach ($i in $count)
{ New-AdUser -Name $username$i -Path $path -Enabled $True -ChangePasswordAtLogon $true  `

-AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -passThru }

Create Active Directory Users in Bulk with a PowerShell Script

Import AD Users from a CSV File

Another option for creating users in AD is to import them from a CSV file. This option is great when you have a list of users with predefined personal details such as:

  • FirstName
  • LastName
  • Username
  • Department
  • Password
  • OU

The CSV file must be in UTF8 encoding and contain contact data that looks like this:

Import Active Directory Users from a CSV File

The following script will create enabled user objects for any users in the CSV that don’t already have accounts in AD. The “Reset password at the next logon” option will be enabled for the new accounts, so you can use your default password:

#Enter a path to your import CSV file
$ADUsers = Import-csv C:scriptsnewusers.csv

foreach ($User in $ADUsers)
{

       $Username    = $User.username
       $Password    = $User.password
       $Firstname   = $User.firstname
       $Lastname    = $User.lastname
    $Department = $User.department
       $OU           = $User.ou

       #Check if the user account already exists in AD
       if (Get-ADUser -F {SamAccountName -eq $Username})
       {
               #If user does exist, output a warning message
               Write-Warning "A user account $Username has already exist in Active Directory."
       }
       else
       {
              #If a user does not exist then create a new user account
          
        #Account will be created in the OU listed in the $OU variable in the CSV file; don’t forget to change the domain name in the"-UserPrincipalName" variable
              New-ADUser `
            -SamAccountName $Username `
            -UserPrincipalName "$Username@yourdomain.com" `
            -Name "$Firstname $Lastname" `
            -GivenName $Firstname `
            -Surname $Lastname `
            -Enabled $True `
            -ChangePasswordAtLogon $True `
            -DisplayName "$Lastname, $Firstname" `
            -Department $Department `
            -Path $OU `
            -AccountPassword (convertto-securestring $Password -AsPlainText -Force)

       }
}

After script execution, we have two new users, Edward Franklin and Bill Jackson, in our Active Directory domain:

Import Active Directory Users from a CSV File after script execution

Let’s take a look at their details by running Get-ADUser cmdlet again:

Get-ADUser E.Franklin -Properties CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet  | Select CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet

Conclusion

Now you know how to create users in Active Directory using PowerShell scripts. Try performing some account creations, bulk account creations and CSV imports yourself on local or remote systems. Remember, the ADUC MMC snap-in is great for creating a few users with extended attributes, but PowerShell is much better for importing a large number of user accounts in bulk.

Jeff is a former Director of Global Solutions Engineering at Netwrix. He is a long-time Netwrix blogger, speaker, and presenter. In the Netwrix blog, Jeff shares lifehacks, tips and tricks that can dramatically improve your system administration experience.

Создание пользователей в Powershell можно выполнить через команду New-ADUser. Мы рассмотрим как создавать в определенной OU, с паролем, из CSV и с другими параметрами. 

Если мы наберем просто команду, то нам предложат ввести логин и наш пользователь создастся отключенным в папке User:

New-ADUser

Логин (Name) — это единственный обязательный параметр для заполнения. Оно соответствует полю, которое выделено на рисунке ниже:

User logon

Создание пользователя в Powershell с параметрами New-ADUser

У командлета есть много параметров (больше 60) и мы рассмотрим основные из них. Для того что бы увидеть все параметры выполните следующее:

Get-Help New-ADUser -Parameter *

Или если хотите найти конкретный параметр (в моем случае все где есть Name):

Get-Help New-ADUser -Parameter *Name*

Обычно нам нужно создать учетку AD с паролем, именем и фамилией и она должна быть активна. Для создания пользователя AD с паролем используется другой командлет Powershell. Я объявлю пароль в переменной, но можно сразу и при создании пользователя:

$pass = ConvertTo-SecureString -String "Password133!" -AsPlainText -Force

Затем создадим пользователя:

New-ADUser -Name "a.strelnikov" -GivenName "Alex" -Surname "Strelnikov" -AccountPassword $pass -Enabled $true -UserPrincipalName "a.strelnikov@domain.local"

Где:

  • Name — логин
  • GivenName — имя
  • SurName — фамилия
  • AccountPassword — пароль, который мы объявили в переменной
  • Enbaled — делает пользователя активным
  • UserPrincipleName — соответствует полю выделенному на рисунке ниже

UserPrincipleName

new-aduser powershell примеры

Создание пользователя в Powershell в определенной OU используя New-ADUser Path

Для добавления пользователя в другой OU нужно использовать ключ Path. На примере домена domain.local и организационной единице Moscow путь будет выглядеть так:

$ou = "OU=Moscow,DC=domain,DC=local"
$pass = ConvertTo-SecureString -String "Password133!" -AsPlainText -Force
New-ADUser -Path $ou -Name "v.petushenko" -GivenName "Vladimir" -Surname "Petushenko" -AccountPassword $pass -Enabled $true -UserPrincipalName "v.petushenko.local"

Причем может появится ошибка:
new-aduser объект каталога не найден
Т.к. в пути вместо OU указывают контейнер CN.

Или если в нас вложенные OU:

$ou = "OU=Marketing,OU=Moscow,DC=domain,DC=local"

powershell создание пользователя ad в определенной ou

Создание пользователей AD из CSV в Powershell New-ADUser

Я создал в Excel такой файл и сохранил как CSV:

CSV Ad powershell New-AdUser

Для того что бы импортировать файл есть командлет Import-Csv. Нужно обратить внимание какой разделитель (делимитер) в файле и у вас в системе. Увидеть это можно так:

(Get-Culture).TextInfo.ListSeparator

Если есть отличия, то тогда в команде импорта нужно добавить ключ ‘-Delimiter’ и указать тот, который в файле. Отличия будут, например, если файл был создан в русской локализации, а импорт идет на сервере с английской.

Импорт и создание пользователей делается так:

#Импортируем пользователей. В моем случае разделитель ;
$users = Import-Csv -Path C:book.csv -Delimiter ";"
#Создаем пароль
$pass = (ConvertTo-SecureString "Password123!" -AsPlainText -Force)
#Создаем пользователей
$users | ForEach-Object {New-ADUser -Name $_.Name -GivenName $_.GivenName -Path ("OU="+$_.Path+",DC=domain,DC=local") -Surname $_.Surname -AccountPassword $pass -Enabled $true }

Сложение в Path сделано для демонстрации такой возможности и не является обязательным.

У меня так же была ошибка:

  • new-aduser указанное имя не является корректным именем пользователя
  • New-ADUser : The object name has bad syntax
  • New-ADUser : Directory object not found

Причины возникновения не совсем ясны. Хоть ошибка и указывала на начало командлета New-AdUser, но проблема была в Path. Из рекомендаций были убрать в CSV файле пустые строки, проверить, что у нас нет путаницы с кавычками ( что мы не используем » ‘ в одном объекте), а так же вынести значение Path вне цикла в переменную. Мне помогло, как я понял, замена кавычек в ключе, экранирование скобками и удаление пробелов в этом ключе.

Само собой мы можем в Csv файле создать больше колонок. Например мы можем там создать и пароль, что бы у всех пользователей он был разный, но нужно будет обязательно сконвертировать его через ConvertTo-SecureString.

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

Теги:

#powershell

#ad

Скрипт для заведения пользователей в Windows Domain Controller

Скрипт реализован на PowerShell

Внимание

Для работы скрипта вам необходимо включить AD PowerShell модуль

Для включения модуля необходимо перейти
Control Panel > Programs > Turn Windows Features On or Off > Remote Server Administration Tools > Role Administration Tools > AD DS and AD LDS Tools > Active Directory module for Windows PowerShell

Image alt

Так же необходимо обладать учётной записью доменного администратора!!!

Принцип создания пользователя

Пользователь указывает свои имя и фамилию из которых потом формируются данные.

Так же пользователь указывает пароль который должен быть от 8 до 14 символов,
содержать большие, маленькие буквы, цифры либо спецсимволы.

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

Будет создан пользователь с логином имя.фамилия и будет добавлена почта вида имя.фамилия@domen.com

Работа скрипта

Пред запуском скрипта необходимо указать переменные:

$dc_server = "<IP or hostname DC server>"   # You primary damain controller
$dc_domain = "<test.local>"                 # You domain
$dc_path = "<path to create user>"          # CN=Users,DC=test,DC=local
$mail_domain = "<exemple.com>"              # user@exemple.com

После чего скрипт можно запускать.

После запуска вам будет задан ряд вопросов ответы на которые сформируют данный пользователя и создадут его.

После удачной отработки скрипта будет выведена информация с логином пользователя, его почтой, и если пароль был сгенерирован то выведется пароль, если пароль тот который вводил пользователь строка будет пустой.

Когда новый сотрудник выходит на работу, обычно мало просто создать ему аккаунт в Active Directory: нужно включить его в группы безопасности, создать личную папку на сетевом диске, почтовый ящик, добавить аккаунт в ERPCRM систему… Все это частично решается копированием аккаунта, но тогда нужно еще вовремя вспомнить и правильно настроить атрибуты Active Directory.

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

Шаблоны и PowerShell

В качестве простой автоматизации для придания новому аккаунту нужных «форм» может выступать и скрипт на любом привычном языке. В качестве параметров он будет принимать данные пользователя и подразделения.

Я буду разбирать более интересные примеры, по сути основанные на этом методе.

Такой скрипт может являться «бэкендом», которому передается предварительно подготовленный «фронтендом» файл в любом текстовом формате: JSON, XML или вовсе CSV.

Например, можно подготовить JSON файл для создания пользователя и папки для него такого вида:

{
    "ActiveDirectory": {
        "UserAccounts": [
            {
                "FirstName" : "Иван",
                "LastName" : "Иванов",
                "Department": "Бухгалтерия",
                "UserName": "Iivanov"
            }
        ]
    },

    "UserHomeFolders" : [
        {
            "Name": "ИвановИ"
        }
    ]
}

В этом примере файл обладает определенной структурой и поддерживает автоматическое создание нескольких пользователей разом. Теперь нужно написать скрипт, который будет парсить содержимое файла и выполнять определенные действия. В нашем примере подойдет такой командлет:

[CmdletBinding()]
param(
    [Parameter()]
    [ValidateNotNullOrEmpty()]
    [string]$TemplateFilePath = 'C:tempusers.json'
)

$users = Get-Content -Path $TemplateFilePath -Raw | ConvertFrom-Json
$users.ActiveDirectory.UserAccounts | ForEach-Object {
    if ($adUser = Get-AdUser -Filter "samAccountName -eq '$($_.UserName)'") {
        $setParams = @{
            Identity = $_.UserName
        }

        if ($adUser.GivenName -ne $_.FirstName) {
            $setParams.GivenName = $_.FirstName
        }

        if ($adUser.SurName -ne $_.LastName) {
            $setParams.SurName = $_.LastName
        }

        if (@($setParams.Keys).Count -gt 1) {
            $setParams
            Write-Verbose -Message "Обновляем существующего пользователя [$($_.UserName)] "
            Set-AdUser @setParams
        } else {
            Write-Verbose -Message "Пользователь [$($_.UserName)] уже создан"
        }

    } else {
        Write-Verbose -Message "Создание нового пользователя [$($_.UserName)]..."
        New-AdUser -Name $_.UserName -GivenName $_.FirstName -SurName $_.LastName -Path "ou=$($_.Department),dc=domain,dc=com"
    }
}

$fileServerShare = 'C:HomeFolders'
$users.UserHomeFolders | ForEach-Object {
    $folderPath = Join-Path -Path $fileServerShare -ChildPath $_.Name

    if (-not (Test-Path -Path $folderPath -PathType Container)) {
        Write-Verbose -Message "Создаем папку [$($folderPath)]..."
        $null = New-Item -Path $folderPath -Type Directory
    } else {
        Write-Verbose -Message "Папка [$($folderPath)] уже создана"
    }
}

Теперь можно запустить получившийся скрипт и насладиться его работой:


Работа командлета.

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

Если командлет можно настроить на запуск по расписанию раз в 5 минут, то осталось придумать, что будет формировать JSON. Это может быть и простой веб-интерфейс, GUI на том же PowerShell и прочие 1С. Интересный пример использования в качестве фронта Google Forms и заодно создание пользователям ящика в G Suite рассмотрен в материале «Ещё один пример автоматизации или PowerShell + Google Apps Script».

Разберу еще несколько примеров автоматизации, облегчающих жизнь.

Задаем права на папки

Бывало и так, что по регламенту для каждого нового пользователя создавалась папка на сетевом диске в подпапке подразделения. И каждый раз на почту сыпались заявки, что папки нет или к ней нет доступа ― загруженные инженеры попросту забывали про такие мелочи.

Чтобы уменьшить негатив, еще до появления PowerShell был разработан скрипт на vbs. Раз в сутки он подключался к AD и собирал оттуда свежесозданных пользователей. А потом создавал папку по стандарту и задавал нужные права при помощи xcacls.vbs такой командой:

WshShell.Run "cscript.exe C:xcacls.vbs " + """" + folder + """" +" "+ "/I COPY /R users /G domain"+ user+ ":F"

Где user ― это имя нового пользователя, folder ― путь к свежесозданной папке, а domain ― наш домен.

Позже для создания пользователей был уже разработан сложный механизм на AutoIT с GUI. Он формировал имя учетной записи по правилам транслитерации, создавал пользователей в 1С и даже выдавал проксимити-карты для доступа на территорию офиса. Права на папки в этом механизме задаются при помощи библиотеки Permissions.au3, которая использует системные dll advapi32.dll и kernel32.dll.

Часть скрипта для нужных разрешений:

FileWriteLine($logfile, "создаем папку "&$path)
 local $aPermissions[2][3]
$aPermissions[0][0]="domain"& $username
$aPermissions[0][1]=1
$aPermissions[0][2]=$GENERIC_ALL
$aPermissions[1][0]="Users"
$aPermissions[1][1]=1
$aPermissions[1][2]=""
_EditObjectPermissions($path, $aPermissions,$SE_FILE_OBJECT,"",1)
 FileWriteLine($logfile, "задаем права")
 _ClosePermissionResources()

В PowerShell аналогичная выдача прав будет выглядеть примерно так:

$acl = Get-Acl $path
$acl.SetAccessRuleProtection($true,$true)
$acl.Access |where {$_.IdentityReference -eq "DomainUsers"} | %{$acl.RemoveAccessRule($_)}
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($username,"FullControl","ContainerInherit,ObjectInherit","None","Allow")
$acl | Set-Acl $path

Пожалуй, управление ACL ― это то немногое, что на PowerShell реализуется нетривиально. Перейдем к тому, в чем PowerShell силен и прост.

Добавляем почту и телефон

Если у вас установлен Exchange как почтовый сервер, то создавать пользователей сразу с почтовым ящиком поможет командлет New-Mailbox. Для создания пользователя в первоначальном скрипте можно использовать такую команду:

New-Mailbox -UserPrincipalName $_.UserName@example.com -Alias $_.UserName
-Database "Mailbox" -Name $_.UserName –OrganizationalUnit
CorpUsers -Password $password -FirstName $_.FirstName -LastName $_.LastName
-DisplayName "$($_.FirstName) $($_.LastName)" -ResetPasswordOnNextLogon $Right

Аналогично будет и с MS Lync:

Enable-CsUser -Identity "$($_.UserName)@domain.ru" -RegistrarPool "lync.domain.ru" -SipAddress "sip:$($_.UserName)@domain.ru"

Если у вас используются другие решения ― например, Postfix для почты и Asterisk для телефонии, ― на помощь придет возможность подключаться по SSH к *nix серверам с систем Windows. Подробно процедура описана в статье «Перекрестное опыление: управляем Linux из-под Windows, и наоборот». Я же напомню, что запуск команд производится через командлет Invoke-Command:

Invoke-Command -Hostname linux-server -ScriptBlock {some linux commands}

Интереснее дела обстоят с прочими системами, вроде 1С.

Создание пользователя в 1С

Про создание пользователей в 1С: Бухгалтерии при помощи AutoIT я уже писал в статье «Набор отверток администратора 1С». Напомню, что обращаться к 1С «снаружи» удобно при помощи COM-объекта v83.comconnector. Поскольку PowerShell тоже поддерживает COM-объекты, приведу часть скрипта для создания пользователей по-новому:

$obj=new-object -comobject V83.ComConnector
$connect=$obj.Connect("Srvr=""servername"";Ref=""basename"";Usr=""login"";Pwd=""password"";")
#создаем пользователя ИБ
$rights=$connect.Metadata.Roles.find($rght)
$newuser= $connect.ПользователиИнформационнойБазы.createuser()
$newuser.name = "$($surname) $($name)"
$newuser.fullname = "$($surname) $($name) $($fathername)"
$newuser.StandardAuthentication = "False"
$newuser.OSAuthentication="True"
$newuser.OSuser="\DOMAINNAME $($Username)"
$newuser.Roles.add($rights)
$newuser.write()

#создаем пользователя в справочнике "Пользователи"

$bject=$connect.NewObject("СправочникМенеджер.Пользователи")
$newuserS=$bject.CreateItem()
$newuserS.code=$"($surname) $($name)"
$newuserS.Description="$($surname) $($name) $($fathername)"
$newuserS.write()

#Добавляем пользователя в группу

$grp=$connect.Справочники.ГруппыПользователей.НайтиПоНаименованию($group).ПолучитьОбъект()
$t=$grp.ПользователиГруппы.add()
$t.Пользователь = $newuserS.ссылка
$grp.write()

Где $rght ― это права пользователя ИБ, а $group ― нужная группа пользователя. Оба значения берутся из шаблона вместе с ФИО.

Разумеется, точный скрипт будет зависеть от вашей конкретной конфигурации 1С ― не забудьте проконсультироваться с программистом 1С.

Создаем пользователя из 1С

Если дисциплина в вашей организации на высоте не только в отделе ИТ, то можно и вовсе избавиться от создания новых пользователей. Ведь при приеме на работу сотрудника обычно вносят в базу в отделе HR, да и при увольнении делают соответствующую отметку.

Основанием для создания учетной записи пользователя, ее блокировки или перемещения будет не просто занесение пользователя в базу, а приказ о приеме на работу, об увольнении или о перемещении в другое подразделение.

В случае с 1С можно сделать регулярную выгрузку из базы новых и уволенных сотрудников хоть в том же формате JSON. А дальше уже пусть работает машина. С примером скрипта, обрабатывающего выгрузку в формате CSV можно ознакомиться в статье «Автоматизация кадровых изменений на PowerShell».

Другим вариантом будет запуск регламентных заданий сразу из 1С ― благо 1С тоже довольно богатый возможностями язык.

Например, создание пользователя в AD будет выглядеть так:

Осторожно, код на русском!

Функция СоздатьПользователя(
 Логин,
 ПарольПользователя,
 ОрганизационнаяЕдиница,
 АдресЭлектроннойПочты,
 МенятьПарольПриВходе = Истина,
 Описание,
 ПутьПользователяAD = "",
 SID = "",
 ОписаниеОшибки = ""

) Экспорт
фРезультат  = Истина;

Попытка    
 ОрганизационнаяЕдиницаОбъект = ПолучитьCOMОбъект("LDAP://" + ОрганизационнаяЕдиница);
 ПользовательAD = ОрганизационнаяЕдиницаОбъект.Create("user", "CN=" + Логин);
 ПользовательAD.sAMAccountName        = Логин;
 ПользовательAD.description            = Описание;
 ПользовательAD.userPrincipalName    = Логин + "@" + Константы.НаименованиеДомена.Получить();

 Если Не ПустаяСтрока(АдресЭлектроннойПочты) Тогда
   ПользовательAD.mail                    = АдресЭлектроннойПочты;
 КонецЕсли;

 Если МенятьПарольПриВходе Тогда
   ПользовательAD.pwdLastSet        = 0;

Иначе
   ПользовательAD.pwdLastSet        = -1;
 КонецЕсли;
 ПользовательAD.SetInfo();
 ПользовательAD.SetPassword(ПарольПользователя);

 Исключение
  фРезультат    = Ложь;
  ОписаниеОшибки    = ОписаниеОшибки();
КонецПопытки;

Если фРезультат Тогда
 SID    = ПреобразоватьSID(ПользовательAD.objectSid);
  ПутьПользователяAD    = ПользовательAD.distinguishedName;
 КонецЕсли;

 Если фРезультат Тогда
  ПользовательAD.AccountDisabled = Ложь;
  ПользовательAD.SetInfo();
 КонецЕсли;

 Возврат фРезультат;
КонецФункции

Подробнее с механизмом работы 1С и AD, а также с примерами готовых функций можно ознакомиться в статье «Работа с Active Directory из 1С» на портале «Инфостарт».

А готовы ли вы доверить создание пользователей, пусть и опосредованно, сотрудникам HR?

Понравилась статья? Поделить с друзьями:
  • Скрап механик скачать бесплатно на русском на windows 7
  • Скрипт для создания vpn l2tp подключения windows
  • Скрыть иконки в трее windows 10
  • Скорость установки windows 10 на ssd
  • Скрипт для смены обоев рабочего стола windows 10