Как упростить создание большого количества пользователей windows

Автоматизация создания учетных записей с помощью 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 эту службу можно установить отдельно, скачав отсюда.

Простой скрипт, или командлет для создания единичных доменных учетных записей пользователей через Powershell я вам показал в одной из прошлых  статей.

Но что делать в том случае, если в Active Directory нужно создать сразу 30, 50, 500 учетных записей пользователей?! — Самый удобный вариант для таких случаев это создать и сохранить список пользователей в формате CSV (Excel) файла, а затем запустить специальный PowerShell скрипт.

Пакетное создание учетных записей в домене AD DS с помощью Powershell

Это я вам сейчас и продемонстрирую в рамках данной статьи. Погнали!

Открываем наш любимый Excel, и создаем файл в формате CSV.

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

В этой статье для примера, я буду использовать Excel файл состоящий из 9 колонок и имеющий следующий формат шапки таблицы:

1. FirstName
2. LastName
3. Initials
4. SamAccountName
5. Phone
6. Department
7. JobTitle
8. Password
9. OU

Нужно заполнить данные пользователей и сохранить файл Excel в формате CSV c запятыми в качестве разделителей.

Кодировка файла при сохранении должна быть строго UTF-8 и никакая другая (иначе скрипт не будет работать)! Кроме того, в значениях столбца OU есть запятые, их нужно взять в двойные кавычки, чтобы все правильно отработало.

Теперь можно импортировать данный CSV-файл (например, new_users_adds.csv) и создать в домене новых пользователей.

Имена пользователей в домене будем заводить на английской языке, из-за того, что мы делаем транслитерацию с кириллицы в латиницу мы добавим в наш скрипт отдельную функцию транслитерации — Translit.
Так же отмечу — если в качестве разделителя CSV файла используется “;”, в командлет Import-Csv нужно добавить аргумент -delimiter «;»

А вот и сам код Powershell-cкрипта для массового создания пользователей из CSV-файла в домене Active Directory:

Import-Module activedirectory
Import-Csv "C:psnew_users_adds.csv" | ForEach-Object {
$upn = $_.SamAccountName + “@contoso.loc”
$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 $_.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
}

После выполнения скрипта, откройте консоль mmc с оснасткой Active Directory Users and Computers, разверните указанный контейнер и убедитесь, что в Acticve Directory появились свежесозданные учетные записи пользователей. На этом всё.

Подписывайтесь на обновления блога:

Наша Группа ВКонтакте

Наш RSS-канал

Наш Telegram-канал

E-mail подписка

Время прочтения
5 мин

Просмотры 41K

Так уж случилось, что я выбрал профессию системного администратора. И занимаюсь этим порою неблагодарным делом уже без малого около 6 лет.
Однажды, пару лет назад, передо мною встал вопрос, позже переросший в задачу, заключающийся в том, как же относительно быстро завести новые учётные записи пользователей в AD под MS Windows Server 2003?

Я думаю что всем известен способ добавления пользователя в домен, так сказать, «ручками». То есть, для добавления новых учётных записей пользователей AD приходится делать примерно следующие вещи: открыть оснастку «Пользователи и компьютеры» вышеназванной ОС, открыть соответствующую OU (Organization Unite), инициировать любым из известных способов создание пользователя, и затем в открывшемся окне создавать пользователей одного за другим. Согласитесь, это достаточно долго и муторно, особенно если необходимых учётных записей пользователей не 10, а скажем — 300, 500 и более. Особенно это станет рутинным делом тогда, когда нужно будет заполнить не только поля «логин» и «пароль», но и, расположенные во всевозможных вкладках, поля «Фамилия», «Имя Отчество», «Должность», «Отдел», «Организация» и т.д. Конечно, Вы скажете что методы «копипасты» и «слепого набора» еще никто не отменял, но вы попробуйте, и ощутите на каком по счету пользователе вы устанете, а если не устанете, то посчитайте потом количество совершенных ошибок при забивке данных.
В общем, поняв что нужно что-то делать с этим и так как время у меня было ограничено, я обратился к интернет ресурсам с целью поиска скрипта, который должен был существовать и решить эту проблему, как подсказывало мое чутье. Увы, я практически разочаровался в том, что увидел. В интернете было полно всевозможных скриптов для автоматизации различных задач в среде AD, но то, что мне было нужно — отсутствовало напрочь. Пришлось обратиться к англоязычным ресурсам, на одном из которых (увы, сайт-ссылку на момент написания статьи я уже утерял, есть мысли где искать, и если найду, то опубликую) был некий скрипт-«рыба» на VBS в очень «сыром» виде, что выяснилось при попытке его применить на тестовой системе ни к чему не приведшей — он просто, априори, не работал, ввиду наличия в нем множества недоработок и банальных ошибок, как выяснилось мною позже. Пришлось исправлять, дописывать код и стать, вдобавок ко всему, немного программистом на языке VBS :)
За сим, позвольте представить на суд уважаемой публики скрипт для добавления учетных записей пользователей в AD в предварительно созданные OU (1-го уровня). Если возникнет вопрос почему и OU не создаются автоматически, то отвечу заранее, что не нашел как это осуществить, да и контроль так жестче за производимыми изменениями в AD — все же приходится не в песочнице играться, а вносить ощутимые изменения в мощную и функционирующую в реальном времени систему, так называемую «Active Directory».

Важное замечание!

Заранее нужно создать файл, содержащий через разделитель «;» необходимые параметры:
Логин; Пароль; Имя Отчество; Фамилия; Должность; Отдел; Организация;
Обязательно наличие замыкающего разделителя «;» в каждой строке, например:
sirin-bird1; пароль1; Имя Отчество1; Фамилия1; Должность1; Отдел1; Организация1;
sirin-bird2; пароль2; Имя Отчество2; Фамилия2; Должность2; Отдел2; Организация2;
sirin-bird4; пароль3; Имя2 Отчество3; Фамилия3; Должность3; Отдел3; Организация3;
sirin-bird3; пароль4; Имя Отчество4; Фамилия4; Должность4; Отдел4; Организация4;
sirin-bird5; пароль5; Имя2 Отчество5; Фамилия5; Должность5; Отдел5; Организация5;
… … … … … … …
Создание такого файла можно поручить и неквалифицированному персоналу, умеющему обращаться с элементарным текстовым редактором. А потом всего лишь проверить правильность набора текста и расстановки разделителей, как и поступил Ваш покорный слуга.

Еще одно важное замечание!

Параметр «Организация» является OU для соответствующего пользователя и не создается этим скриптом, поэтому чтобы все сработало — предварительно создайте соответствующие OU в корне домена (возле папки OU «Users»). Это объясняется тем, что у меня в домене было несколько организаций-клиентов со своими пользователями-сотрудниками, отсюда и такое разделение.

Итак, сам скрипт:

Set objArgs = WScript.Arguments
if objArgs.Count = 0 then
WScript.Echo «Добавляет пользователей в домен.»
WScript.Echo «add_to_ad.vbs [имя файла]»
WScript.Echo » [имя файла] — файл со списком пользователей»
WScript.Echo » формат файла: Логин; Пароль; Имя-Отчество; Фамилия; Должность; Отдел; Организация;»
WScript.Quit
end if
path = objArgs(0)

Set fso = CreateObject(«Scripting.FileSystemObject»)
Set objFile = fso.OpenTextFile(path, 1)
Do Until objFile.AtEndOfStream
str = objFile.ReadLine
for i = 1 to Len(str) step 1
strCh = Mid (str, i, 1)
if strCh = «;» then
select case Z
case 0
UserName = strRez ‘ *** Логин
case 1
UserPassword = strRez ‘ *** Пароль
case 2
FirstName = strRez ‘ *** Имя-Отчество
case 3
LastName = strRez ‘ *** Фамилия
case 4
Title = strRez ‘ *** Должность
case 5
Department = strRez ‘ *** Отдел
case 6
Company = strRez ‘ *** Организация
‘case 7
‘Manager = strRez’ *** Руководитель
‘case 8
‘OfficeRoom = strRez ‘ *** Комната
end select
strRez = «»
strCh = «»
Z = Z + 1
else
strRez = strRez + strCh
end if
next
strRez = «»
strCh = «»
Z = 0

Set objRoot = GetObject(«LDAP://RootDSE»)
Set objADSystemInfo = CreateObject(«ADSystemInfo»)
DomainDNSName = objADSystemInfo.DomainDNSName
DomainDN = objRoot.Get(«DefaultNamingContext»)
ContainerDN = «ou=» & Company & «,» & DomainDN

pName = UserName & «@» & DomainDNSName ‘»@snb.local»

‘!!! ВАЖНО !!!***Указываем ЗАРАНЕЕ СОЗДАННУЮ OU в которую кидаются новые пользователи *******

Set objOU = GetObject(«LDAP://» & ContainerDN)

‘*************************** Создаем учетку пользователя домена ***********************
Set objUser = objOU.Create(«User», «cn=» + UserName)
‘ **** Login *****
objUser.Put «sAMAccountName», UserName
objUser.SetInfo

‘ ****** пароль *******
Set objUser = GetObject («LDAP://cn=» + UserName + «,» + ContainerDN)
objUser.SetPassword UserPassword

‘ ******* UPN **********
objUser.Put «userPrincipalName», pName

‘****** выключение аккаунта *******
objUser.AccountDisabled = TRUE

‘ ******** Имя *********
objUser.Put «givenName», FirstName

‘ ***** Фамилия *********
objUser.Put «sn», LastName

‘ ***** Выводимое имя ******
objUser.Put «displayName», LastName & » » & FirstName

‘ Инициалы
objUser.Put «initials», left(FirstName,1) & «.» ‘& left(LastName,1)

‘ ***** Должность ******
objUser.Put «title», Title

‘ ***** Отдел ******
objUser.Put «department», Department

‘ Организация
objUser.Put «Company», Company

‘ Руководитель
‘objUser.Put«manager», Manager

‘ комната
‘objUser.Put «physicalDeliveryOfficeName», OfficeRoom

‘ ***** Уст. Требовать смену пароля при следующем входе в систему ***
objUser.Put «pwdLastSet», CLng(0)

objUser.SetInfo

‘ WScript.Echo «Пользователь — » + UserName + » добавлен в AD»

Loop
WScript.Echo «Пользователи добавлены в AD»
objFile.Close

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

‘ Домашний каталог
‘objUser.Put «HomeDirectory», strHomeDirPath

‘ почтовый ящик
‘objUser.Put «mailNickname», strName

‘ сайт
‘objUser.Put «wWWHomePage», «www.test.com»

‘ еще немного примеров:
‘ObjUser.Put «Description», «Year 2»
‘objUser.Put «physicalDeliveryOfficeName», sOfficeName
‘objUser.Put «ProfilePath», sScPath
‘sHDrive objUser.Put «HomeDrive», «Z»
‘objUser.Put «TerminalServicesProfilePath», sTermProf
‘objUser.Put «TerminalServicesHomeDirectory», sTermHDir

Код из текстового редактора сохранить нужно с расширением .vbs
Запуск скрипта осуществляется с передачей параметров из файла.
Например: script.vbs users.txt
, где
script.vbs — сам скрипт
users.txt — файл с входными данными.

Выполнение скрипта занимает секунды с мгновенным результатом на выходе.
Как видно из кода, если раскомментить еще пару строк и внести дополнения в файл с входными параметрами, то можно «на автомате» внести еще и Руководителя и Номер комнаты. Скрипт можно развивать неограниченно. Например, добавить возможность внесения таким же образом такого поля как «Телефон».
В качестве текстового редактора под Windows могу посоветовать свободный для использования и весьма функциональный Notepad++.
Одна из полезных ссылок, где есть скрипты на VBS: forum.sysadmins.su
Надеюсь приведенная информация окажется для кого-либо весьма полезной и нужной.

Решил поделиться одной своей наработкой, думаю что она окажется полезной многим админам Windows сетей.
Представим ситуацию, вам требуется создать большое количество учетных записей для рабочих станций в домене Windows 30, 50 или 100 машин, создавать руками это долго и муторно, ну а если еще и правила безопасности в вашей сети настолько драконовские, что используется предварительное создание учетных записей ПК в домене, а вводить в домен, разрешено только администраторам домена, каждый раз гонять админа, вводить тачку в домен глупо, но у нас есть группа, которая занимается поддержкой пользователей назовем ее, например, Support, давать этой группе админские права- хреновая идея, т.к. в администраторы домена попадают, обычно, только доверенные сотрудники, да и техподдержке такие права для работы не требуются, а сотрудникам должны быть положены только те права, которые необходимы для выполнения их служебных обязанностей и не более того, о чем, недвусмысленно, напоминает Microsoft, в своей документации.

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

В принципе создать кучу учетных записей для ПК, не представляет никакой сложности, сложность наступает на моменте предоставления прав доступа на ввод в домен т.к. не понятно какие права должны приехать на «свежесозданную» учетку.
Например создание учетной записи ПК в домене Widows, из командной строки, выполняется через djoin
Представим ситуацию что в домене contoso.local в подразделении workstations, на которое накатываются нужные групповые политики, вам требуется создать учетную запись ПК, из командной строки, с именем: contoso-wks01
Тогда команда будет иметь вид:

djoin /provision /domain contoso.local /machine contoso-wks01 /savefile C:log.txt /machineou OU=workstations,DC=contoso,DC=local

Где:
djoin — утилита по автономному созданию (присоединению) учетной записи ПК в домене
/provision — параметр запуска, на создание записи в домене
/domain contoso.local -имя домена
/machine contoso-wks01 имя машины которое вводится в домен
/savefile C:log.txt — сохранение информации для ввода в домен
/machineou OU=workstations,DC=contoso,DC=local -путь в LDAP, где будет создана учетная запись ПК
В принципе, команда проста и разжевана в технет до полного и легкого усвоения, после ее использования можно смело залезать в OUшку: workstations и обнаружить там учетную запись ПК с именем: contoso-wks01

Теперь, для тестирования, нам нужно создать группу безопасности Support (если у вас ее не существует) и использовать стандартную оснастку: Active Directory Users and Computers, создать учетную запись ПК с именем: contoso-wks02, и предоставив права на ввод в домен, группе Support, чтобы выглядело, как на скриншоте ниже
New Object-Computer
Если просмотреть вкладку Security, то в списке найдя группу Support, мы обнаружим что права на ввод в домен определяет целая куча параметров безопасности, а если посмотреть через расширенные параметры, то там вообще «чёрт ногу сломит»… Вот эти права доступа нам и нужно передать к учетной записи ПК чтобы нужная нам группа получила права ввод в домен ПК с таким именем.

Выполним туже задачу но из командной строки, чтобы оценить, масштабы «бедствия».
Для работы с правами доступа в домене существует утилита dsacls она по умолчанию установлена на контроллерах домена и в системе где установлен Remote Server Administration Tools
Нам нужно посмотреть какие права предоставлены со стороны системы:

dsacls CN=contoso-wks02,OU=workstations,DC=contoso,DC=local

нам вывалит огромный листинг с правами доступа для различных учетных записей, но нас интересует, в данной ситуации, только группа Support, чтобы не ломать глаза просматривая всю эту «портянку» воспользуемся утилитой командной строки find, это такая легкая подделка под grep в linux, тогда запрос принимает вид:

dsacls CN=contoso-wks02,OU=workstations,DC=contoso,DC=local | find "Support"

и получаем запись вида:

Allow CONTOSOSupport SPECIAL ACCESS
Allow CONTOSOSupport SPECIAL ACCESS for Logon Information
Allow CONTOSOSupport SPECIAL ACCESS for description
Allow CONTOSOSupport SPECIAL ACCESS for displayName
Allow CONTOSOSupport SPECIAL ACCESS for sAMAccountName
Allow CONTOSOSupport SPECIAL ACCESS for Account Restrictions
Allow CONTOSOSupport SPECIAL ACCESS for Validated write to DNS host name
Allow CONTOSOSupport SPECIAL ACCESS for Validated write to service principal name

«Портянка» принимает простой и, вполне, читаемый вид. Собственно вот такие права на учетную ПК нам и нужно предоставить группе Support, которая и будет загонять ПК в домен. Дело за малым, предоставить эти права… Как это сделать? Тут все не очень явно, но разобраться можно.

Лирическое отступление.
Когда я разбирался со всей этой «фигней» у меня создалось впечатление что разработкой разных системам в домене занимались разные люди, котрые между собой не контактировали и синтаксис команд напоминает письмо из Простоквашено -Ваш сын Дядя Шарик, т.е. я так и не смог понять какой логикой руководствовались люди разрабатывая это!!!

Вернемся к нашим учетным записям ПК. В самом начале мы с вами создали учетную запись ПК с именем contoso-wks01, в данным момент, группа Support не имеет прав на ввод в домен ПК с таким именем, вы можете в этом убедиться, если зайдете во вкладку безопасность, учетной записи ПК с именем contoso-wks01
В общем дадим права, тут все «просто»:

dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC;

Где:
dsacls -утилита работающая со списками контроля доступа
«CN=contoso-wks01,OU=workstations,DC=contoso,DC=local» -путь к объекту в каталоге LDAP к которому необходимо настроить права доступа
/G «Support» — дать права доступа группе Support
:CALCGRSDDTRC; — какие права доступа предоставить указанной группе ( что сие означает остается вам в качестве домашнего задания :) )
Выполняем указанные команды, одну за другой, значение этих команд думаю что понятны, кому не понятно, то вперед на технет, читать документацию, там все есть, и вам откроется истина, но только после прохождения квеста…

dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC;
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;description;
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;sAMAccountName;
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;displayName;
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":WP;userAccountControl;
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to service principal name";
dsacls "CN=contoso-wks01,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to DNS host name";

Теперь идем в свойства учетной записи contoso-wks01 и видим что там появилась группа Support с необходимыми правами.

Вот теперь вы поняли что значит рулить параметрами доступа из командной строки, а теперь представьте что вам сказали создать 100 учетных записей ПК, кликать мышкой, слишком монотонно, лопатить из командной строки, есть очень большой шанс напортачить в синтаксисе и потратить еще больше времени отлавливая ошибки, остается этот процесс автоматизировать…
От вас требуется создать файл со списком имен ПК котрые необходимо ввести в домен и указать группу которой необходимо дать права на ввод, список ПК делается в Excel за минуту, а дальше в дело вступает наш скрипт, я специально не делал его на PowerShell, чтобы он был совместим и с Windows 2003 и работал без каких-либо плясок с бубном.

@echo off
FOR /f %%i in (C:joinpc.txt) DO (
djoin /provision /domain contoso.local /machine %%i /savefile C:joinlog.txt /machineou OU=workstations,DC=contoso,DC=local
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":CALCGRSDDTRC;
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;description;
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;sAMAccountName;
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;displayName;
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":WP;userAccountControl;
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to service principal name";
dsacls "CN=%%i,OU=workstations,DC=contoso,DC=local" /G "Support":"WS;Validated write to DNS host name";
)
pause

В общем вам требуется создать папку, для примера, я назвал её join и в нее поместить 2 файла, собственно наш bat имя которому придумайте сами и текстовый файл с именем pc.txt -в котором указываются имена ПК для ввода.
Все работает очень просто, а как- понятно тем, кто прочитал статью с начала. После выполнения ждет нажатия любой клавиши.

Важное дополнение!

Возможные проблемы в работе-если имя группы безопасности содержит пробелы, то права доступа не доезжают. Так что тут вспомниается бородатый анекдот с просторов:
Вопрос: Люди-что-делать-у-меня-не-работает-проблел?
Отвает: Некоторые_люди_не_пользуются_пробелом… :)
В общем не используйте в имени группы, которой предоставляется право на ввод в домен, пробелов, а так полная свобода.

На этом все, надеюсь наработка кому-то окажется полезной и сэкономит много часов времени, а чем в это время можно заняться решать вам, например можно «постить котиков»…

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

Добрый день! В этой статье я бы хотел описать применённое мной
практическое решение по автоматизации одной рутинной задачи второй
линии технической поддержки одного крупного предприятия.

Имеем два территориально распределённых домена AD по 10 000
человек, применённое решение по организации Веб-доступа к удаленным
рабочим столам через приложения RemoteApp с несколькими
интегрированными информационными системами и активно пополняющиеся
база, человек так на 500 в месяц. На ~24 в рабочий день, на ~3
человека в час.

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

Вторая проблема идентификация личностей, допустим на файловых
ресурсах предприятия, как это часто бывает, имеется информация, не
предназначенная для посторонних глаз, и соответственно необходимо
проверять каждого запросившего доступ на внесение в Active
Directory и предоставления определённых групп доступа. К сожалению, без бюрократии в решении
этого вопроса обойтись не удалось. Процедура сводится к подаче
бумажной заявки в форме максимально стандартизированной, за
подписью (желательно электронной) руководителя заявляющего и
одобрением данного документа лицами знакомыми лично с
подписантом.

После одобрения стандартизированной заявки остается дело за малым,
внести людей в AD, присвоить необходимые группы доступа, и внести в
excel табличку. Последний пункт может показаться немного архаичным,
ведь AD вполне себе поддерживает аудит изменений, но моя практика
показывает, что на таком обороте этот пункт не является лишним, а
даже упрощает процесс поиска граблей в случае разбора полётов,
который не редко возникает, следуя из первого вывода.

Но процесс можно немного автоматизировать, применив пару нехитрых
скриптов. Логика сводится к обратному процессу:
1) Утверждаем стандарт внесения Учётных Записей в AD на
предприятии
2) Запрашиваем у пользователя данные едином формате.
image
3) Вносим в таблицу основные данные, например:
4) Экспортируем из Excel в CSV файл, автоматически сгенерированную
страницу, пригодную для автоматического занесения в AD при помощи
скриптов
5) Экспортируем и вуаля! Остаётся передать логин и пароль
пользователю.
Возможно описанные мной методы нельзя назвать best practice, однако
они позволяют на практике решить существующую проблему без
написания отдельно информационной системы и создания большого
количества интеграций.

Далее я опишу пару технических моментов и опубликую скрипты
которыми пользуюсь:
Так выглядит таблица пригодная для импорта в AD:

image
У меня эта таблица генерируется автоматически из предыдущей, пример
прилагаю.
Сохранять таблицу пригодную для импорта необходимо в формате CSV
(разделитель запятые)
image

Как вы думаете какими будут разделители если открыть
сгенерированный файл блокнотом? Неправильно. Такими ;

Отдельно в моей реализации следует остановиться на столбце
транслит. В утверждённом нами стандарте часть полей заполняется
транслитом по утверждённому образцу и чтобы не делать это каждый
раз я использовал vba скрипт, вот он:

Function TranslitText(RusText As String) As String    Dim RusAlphabet As Variant 'массив из букв русского алфавита    RusAlphabet = Array("-", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "", "Ь", "Э", "Ю", "Я")     Dim EngAlphabet As Variant 'массив из букв английского алфавита    EngAlphabet = Array("-", "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya")         Dim EngText As String, Letter As String, Flag As Boolean                 For i = 1 To Len(RusText) 'цикл по всем символам русского текста        Letter = Mid(RusText, i, 1)        Flag = 0        For j = 0 To 67 'цикл по всем буквам русского алфавита            If RusAlphabet(j) = Letter Then 'если символ из текста совпал с буквой из русского алфавита...                Flag = 1                If RusAlphabet(j) = Letter Then 'проверка на регистр (верхний или нижний)                    EngText = EngText & EngAlphabet(j) '... то добавляем соответствующую букву из английского алфавита                    Exit For                Else                    EngText = EngText & UCase(EngAlphabet(j))                    Exit For                End If            End If        Next j        If Flag = 0 Then EngText = EngText & Letter 'если символа из текста в алфавите нет (например, знаки препинания и т.п.), то добавляем символ без изменения    Next i    TranslitText = EngTextEnd Function

Не делайте как я, пожалуйста, используйте один из существующих
стандартов транслитерации по ссылке
habr.com/ru/post/499574

Следующий же скрипт помещённый в файл с расширением .ps1 позволит
вам в пару кликов закинуть все учётные записи из сгенерированного
на предыдущем шаге файла в AD, как бы много их там не было. А
заодно и навесить на все созданные УЗ группу ad-group.

Import-Module activedirectory Import-Csv "C:generated.csv" -Encoding default -Delimiter ';'| ForEach-Object {New-ADUser -Server DOMEN.RU -Name $_.FirstName `-DisplayName $_.DisplayName `-GivenName $_.GivenName `-Surname $_.LastName `-Initials $_.Initials `-OfficePhone $_.Phone `-Description $_.Description `-UserPrincipalName $_.UserPrincipalName `-SamAccountName $_.samAccountName `-Email $_.mail `-Path "OU=TEST_OU,OU=Guest,OU=Users,OU=DOMEN,DC=DOMEN,DC=RU" `-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true Set-ADuser $_.samAccountName -ChangePasswordAtLogon $True Add-AdGroupMember -Identity ad-group  -Members $_.samAccountName} 

Автоматизируем ведение большого количества пользователей в AD +7

Системное администрирование, PowerShell, Лайфхаки для гиков


Рекомендация: подборка платных и бесплатных курсов Smm — https://katalog-kursov.ru/

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

Добрый день! В этой статье я бы хотел описать применённое мной практическое решение по автоматизации одной рутинной задачи второй линии технической поддержки одного крупного предприятия.

Имеем два территориально распределённых домена AD по 10 000 человек, применённое решение по организации Веб-доступа к удаленным рабочим столам через приложения RemoteApp с несколькими интегрированными информационными системами и активно пополняющаяся база, человек так на 500 в месяц. На ~24 в рабочий день, на ~3 человека в час.

Первый очевидный вывод из входных данных – на таком количестве пользователей один админ не справится, у него должно быть право заболеть/уйти в отпуск не парализовав предприятие. А практика показывает, что и два не справляются.

Вторая проблема – идентификация личностей, допустим на файловых ресурсах предприятия, как это часто бывает, имеется информация, не предназначенная для посторонних глаз, и соответственно необходимо проверять каждого запросившего доступ на внесение в Active Directory и предоставления определённых групп доступа. К сожалению, без бюрократии в решении этого вопроса обойтись не удалось. Процедура сводится к подаче бумажной заявки в форме максимально стандартизированной, за подписью (желательно электронной) руководителя заявляющего и одобрением данного документа лицами знакомыми лично с подписантом.

После одобрения стандартизированной заявки остается дело за малым, внести людей в AD, присвоить необходимые группы доступа, и внести в excel табличку. Последний пункт может показаться немного архаичным, ведь AD вполне себе поддерживает аудит изменений, но моя практика показывает, что на таком обороте этот пункт не является лишним, а даже упрощает процесс поиска граблей в случае разбора полётов, который не редко возникает, следуя из первого вывода.

Но процесс можно немного автоматизировать, применив пару нехитрых скриптов. Логика сводится к обратному процессу:

  1. Утверждаем стандарт внесения Учётных Записей в AD на предприятии
  2. Запрашиваем у пользователя данные едином формате.

    image

  3. Вносим в таблицу основные данные, например:
  4. Экспортируем из Excel в CSV файл, автоматически сгенерированную страницу, пригодную для автоматического занесения в AD при помощи скриптов
  5. Экспортируем и вуаля! Остаётся передать логин и пароль пользователю.

Возможно описанные мной методы нельзя назвать best practice, однако они позволяют на практике решить существующую проблему без написания отдельно информационной системы и создания большого количества интеграций.

Далее я опишу пару технических моментов и опубликую скрипты которыми пользуюсь:
Так выглядит таблица пригодная для импорта в AD:

image

У меня эта таблица генерируется автоматически из предыдущей, пример прилагаю.

Сохранять таблицу пригодную для импорта необходимо в формате CSV (разделитель – запятые)

image

Как вы думаете какими будут разделители если открыть сгенерированный файл блокнотом? Неправильно. Такими – «;»

Отдельно в моей реализации следует остановиться на столбце транслит. В утверждённом нами стандарте часть полей заполняется транслитом по утверждённому образцу и чтобы не делать это каждый раз я использовал vba скрипт, вот он:

Function TranslitText(RusText As String) As String
    Dim RusAlphabet As Variant 'массив из букв русского алфавита
    RusAlphabet = Array("-", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я")
 
    Dim EngAlphabet As Variant 'массив из букв английского алфавита
    EngAlphabet = Array("-", "a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya")
     
    Dim EngText As String, Letter As String, Flag As Boolean
             
    For i = 1 To Len(RusText) 'цикл по всем символам русского текста
        Letter = Mid(RusText, i, 1)
        Flag = 0
        For j = 0 To 67 'цикл по всем буквам русского алфавита
            If RusAlphabet(j) = Letter Then 'если символ из текста совпал с буквой из русского алфавита...
                Flag = 1
                If RusAlphabet(j) = Letter Then 'проверка на регистр (верхний или нижний)
                    EngText = EngText & EngAlphabet(j) '... то добавляем соответствующую букву из английского алфавита
                    Exit For
                Else
                    EngText = EngText & UCase(EngAlphabet(j))
                    Exit For
                End If
            End If
        Next j
        If Flag = 0 Then EngText = EngText & Letter 'если символа из текста в алфавите нет (например, знаки препинания и т.п.), то добавляем символ без изменения
    Next i
    TranslitText = EngText
End Function

Не делайте как я, пожалуйста, используйте один из существующих стандартов транслитерации по ссылке.

Следующий же скрипт помещённый в файл с расширением .ps1 позволит вам в пару кликов закинуть все учётные записи из сгенерированного на предыдущем шаге файла в AD, как бы много их там не было. А заодно и навесить на все созданные УЗ группу ad-group.

Import-Module activedirectory 
Import-Csv "C:generated.csv" -Encoding default -Delimiter ';'| ForEach-Object {
New-ADUser -Server DOMEN.RU -Name $_.FirstName `
-DisplayName $_.DisplayName `
-GivenName $_.GivenName `
-Surname $_.LastName `
-Initials $_.Initials `
-OfficePhone $_.Phone `
-Description $_.Description `
-UserPrincipalName $_.UserPrincipalName `
-SamAccountName $_.samAccountName `
-Email $_.mail `
-Path "OU=TEST_OU,OU=Guest,OU=Users,OU=DOMEN,DC=DOMEN,DC=RU" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) -Enabled $true 
Set-ADuser $_.samAccountName -ChangePasswordAtLogon $True 
Add-AdGroupMember -Identity ad-group  -Members $_.samAccountName
} 
CSVDE не заменит Addusers

В рейтинге нелюбимых заданий для администраторов уверенно лидирует следующее: «Быстро создать много учетных записей пользователей». Нередко приходится слышать жалобы типа: «Шеф опять требует к контрольному сроку завести кучу пользователей в домене Windows 2003! Наверное, снова сломается мышь от щелканья в Active Directory Users and Computers. Да есть ли приемлемый способ решить эту нудную задачу?!» К счастью, эта проблема действительно имеет простое решение.

Строго говоря, приемлемых способов существует множество. Например, и в Windows 2003, и в Windows XP имеется утилита Dsadd Users, предназначенная для создания учетных записей пользователей из командной строки. Небольшое упражнение на копирование и вставку — и пакетный файл для любого количества пользователей готов в считанные минуты. В Windows 2000 Server и более поздних версиях имеется createusers.vbs — сценарий на VBScript для создания учетных записей пользователей, единичных или по указанному списку. По крайней мере, со времен Windows NT 4.0, а может, даже раньше, можно было применить команду Net Users имя_пользователя /Add для добавления одного пользователя, теперь снова нужно добавить немного Notepad — и вот вам пакетный файл для добавления группы пользователей.

Лично я предпочитал использовать утилиту Addusers (addusers.exe) из набора инструментов Microsoft Windows NT Server 4.0 Resource Kit . Эта утилита позволяет экспортировать базы данных SAM и AD в текстовые файлы в формате CSV (comma separated values, данные, разделенные запятыми) и импортировать такие файлы для массового создания пользовательских учетных записей. К сожалению, впоследствии Microsoft исключила из поставки Addusers, предоставив взамен две другие утилиты — Comma Separated Value Data Exchange (CSVDE) и Lightweight Data Interchange Format, Data Exchange (LDIFDE). Они, конечно, имеют свои достоинства и недостатки. В данной статье мы остановимся подробнее на использовании утилиты CSVDE.

Как работает CSVDE

Подобно Addusers, CSVDE позволяет экспортировать содержимое базы AD домена в текстовый файл CSV, который может использоваться в дальнейшем для пакетного создания учетных записей пользователей в целевом домене создания путем импортирования. Недостаток Addusers заключается в том, что данная утилита воспринимает только те атрибуты учетных записей, которые использовались в Windows NT 4.0. Пришедшая ей на смену утилита CSVDE позволяет переносить почти полный набор свойственных AD характеристик пользовательских учетных записей. Например, в отличие от Addusers, утилита CSVDE позволяет переносить такие атрибуты пользователя, как имя руководителя (principal name), адрес электронной почты и многие другие.

Следующая элементарная команда используется для полного экспорта содержимого базы данных AD:

csvde -f export.csv

При вызове этой команды будет создан файл с именем export.csv, содержащий объекты из базы данных текущего домена AD. Эти данные могут понадобиться в нашем примере как образец формата файла CSV для дальнейшего импорта с помощью CSVDE, а также для отладки на случай возникновения проблем. Достаточно часто возникают проблемы с созданными вручную файлами, когда CSVDE отказывается воспринимать предлагаемый файл и сообщает об ошибках формата. Файлы CSV можно просматривать и редактировать в Notepad, но гораздо больше для этой цели подходит Microsoft Excel, позволяющий просматривать данные в виде таблицы и предоставляющий богатые возможности редактирования.

Для более удобного просмотра файла в Excel нужно выделить весь лист (Ctrl+A) и выбрать в меню «Формат», «Столбец», «Автоподбор ширины» (Format, Column, Autofit) для отображения скрытой информации и сокращения пустых столбцов. Полученный таким образом файл CSV обычно имеет очень большой размер. В результате ввода этой команды CSVDE выдаст полную информацию обо всех объектах AD — учетных записях компьютеров, объектах групповых политик (GPO), организационных единицах (OU) и многом другом. Поскольку нас интересуют только учетные записи пользователей, следует ограничить экспортируемую информацию только данными о пользователях. Для этого требуется ограничить класс выдаваемых объектов с помощью ключа -r (restrict):

csvde -f export.csv -r «(objectClass=User)»

Полученный файл тоже будет содержать множество столбцов, большинство из которых в процессе создания файла CSV для импорта не пригодятся. Скорее всего, понадобятся следующие столбцы: DN (distinguished name, отличительное имя пользователя), objectClass (принимает значение user), name (полное имя пользователя), cn (то же, что и полное имя), displayName (то же, что и полное имя), givenName, sn (фамилия), profilePath, mail, sAMAccountName (имя пользователя, как было принято до Windows 2000) и userPrincipalName (имя руководителя данного пользователя. Если в организации принято заполнять дополнительные информационные поля (Manager, Office и т. п.) в оснастке Active Directory Users and Computers, то, возможно, понадобится использовать и эти дополнительные поля, помимо перечисленных выше.

Ограничения CSVDE

Складывается впечатление, что теперь файл CSV можно загрузить с помощью CSVDE обратно в AD и получить новые учетные записи, как это происходило в случае использования утилиты Addusers. К сожалению, сделать это не удастся по нескольким причинам. В частности, CSVDE экспортирует такие уникальные идентификаторы SID (objectSID), которые невозможно импортировать. При попытке импортировать файл, содержащий поля objectSID, система выдаст сообщение: Add error on line 2: Unwilling To Perform (ошибка добавления в строке 2: выполнение невозможно). Со стороны сервера будет получено сообщение об ошибке: Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM) (доступ к атрибуту запрещен, так как владельцем атрибута является Security Accounts Manager, SAM).

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

csvde -f export.csv -m -r «(objectClass=User)»

Сформировав пригодный для импорта файл, можно импортировать его в AD командой

csvde -f filetoimport.csv -i

где ключ -i указывает на операцию импорта.

CSVDE имеет и ряд других ограничений. Во-первых, CSVDE не устанавливает пароли для созданных учетных записей пользователей. Поэтому после создания набора учетных записей для них необходимо установить пароли каким-то другим способом (в следующей статье будет рассказано, как это сделать с помощью сценария VBScript). Во-вторых, все созданные таким образом учетные записи не имеют пароля и заблокированы, поскольку доменные политики Windows 2003 по умолчанию требуют сложных паролей. И самое главное, CSVDE не позволяет включать пользователей в группы безопасности. Можно создать множество пользователей, но если попытаться задействовать атрибут Member Of для включения пользователей в какие-нибудь группы, ответом будет сообщение об ошибке SAM.

В целом я не могу назвать CSVDE полноценной заменой утилите Addusers. Некоторые из его недостатков CSVDE можно обойти с помощью сценариев, но об этом мы поговорим в следующем выпуске.


Редактоp Windows NT Magazine MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com

Skip to content

Powershell — массовое создание локальных пользователей

Home/Powershell/Powershell — массовое создание локальных пользователей

Powershell — массовое создание локальных пользователей

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

• Windows 2012 R2
• Windows 2016
• Windows 2019
• Windows 10

Чтобы включить эту команду Powershell, некоторые версии Windows требуют установки программного обеспечения под названием: Windows Management Framework.

Список оборудования

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

Эта ссылка будет также показать список программного обеспечения, используемого для создания этого учебника.

Похожий учебник — PowerShell

На этой странице мы предлагаем быстрый доступ к списку учебников, связанных с PowerShell.

Учебник Powershell — Массовое создание локальных пользователей

Как Администратор, запустите новый запрос командной строки POWERSHELL.

Windows 10 - powershell elevated

В нашем примере мы создаем файл CSV под названием MYFILE в корне диска C.

Читайте из файла CSV с помощью Powershell.

Выполните массовое создание локальных учетных записей пользователей.

В нашем примере мы создали 3 локальные учетные записи пользователей.

Проверьте существование новых учетных записей пользователей.

Поздравляю! С помощью Powershell можно создать несколько учетных записей пользователей.

VirtualCoin CISSP, PMP, CCNP, MCSE, LPIC22021-10-25T23:19:59-03:00

Related Posts

Page load link

Join Our Newsletter 

Stay updated with the latest tutorials

close-link

This website uses cookies and third party services.

Ok

Windows 10 позволяет нескольким людям использовать один и тот же компьютер. Для этого вы создаете отдельные учетные записи для каждого человека, который будет использовать компьютер. Каждый человек получает собственное хранилище, приложения, рабочие столы, настройки и так далее. … Сначала вам понадобится адрес электронной почты человека, для которого вы хотите создать учетную запись.

Как создать вторую учетную запись пользователя в Windows 10

  1. Щелкните правой кнопкой мыши кнопку меню «Пуск» Windows.
  2. Выберите Панель управления.
  3. Выберите Учетные записи пользователей.
  4. Выберите Управление другой учетной записью.
  5. Выберите Добавить нового пользователя в настройках ПК.
  6. Используйте диалоговое окно «Учетные записи» для настройки новой учетной записи.

Сколько пользователей может обрабатывать Windows 10?

Windows 10 не ограничивает количество создаваемых учетных записей. Возможно, вы имеете в виду Office 365 для дома, которым могут пользоваться не более 5 пользователей?

Почему я не могу добавить еще одного пользователя в Windows 10?

Проблема «Не удается создать нового пользователя в Windows 10» может быть вызвана многими факторами, такими как настройки зависимости, проблемы с сетью, неправильные настройки Windows и т. д.

Как включить несколько пользователей в Windows 10?

msc), чтобы включить политику «Ограничить количество подключений» в разделе «Конфигурация компьютера» -> «Административные шаблоны» -> «Компоненты Windows» -> «Службы удаленного рабочего стола» -> «Узел сеанса удаленного рабочего стола» -> «Подключения». Измените его значение на 999999. Перезагрузите компьютер, чтобы применить новые параметры политики.

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

Как мне добавить еще одного пользователя в Windows 10?

Выберите Начать > Настройки> Учетные записи, а затем выберите Семья и другие. пользователей. (В некоторых версиях Windows вы увидите другое пользователей.) Выберите Добавить кого-нибудь в это PC. Выберите У меня нет данных для входа этого человека и на следующей странице выберите Добавить пользователь без Счетом Microsoft.

Как несколько пользователей могут использовать один компьютер одновременно?

Все, что вам нужно, чтобы начать использовать один компьютер для двух пользователей, — это для подключения дополнительного монитора, клавиатуры и мыши к текущему компьютеру и запуска АСТЕР. Будьте уверены, наше мощное программное обеспечение позволяет нескольким пользователям работать на одном компьютере с двумя мониторами, как если бы у каждого из них был свой компьютер.

Как мне добавить на свой компьютер еще одного пользователя?

Как создать новую учетную запись пользователя на вашем компьютере

  1. Выберите Пуск → Панель управления и в появившемся окне щелкните ссылку Добавить или удалить учетные записи пользователей. …
  2. Щелкните Создать новую учетную запись. …
  3. Введите имя учетной записи, а затем выберите тип учетной записи, которую вы хотите создать. …
  4. Нажмите кнопку «Создать учетную запись» и закройте панель управления.

Почему я не могу добавить еще одну учетную запись Gmail?

«Что-то пошло не так» или «Не удалось установить соединение с сервером». В приложение Gmail нельзя добавить учетные записи, не поддерживающие IMAP, например Exchange и POP. Если вы добавляете учетную запись другого типа, обратитесь к своему e-mail провайдер, чтобы убедиться, что IMAP включен.

Как изменить локальных пользователей и группы в Windows 10?

Откройте «Управление компьютером» — быстрый способ сделать это — одновременно нажать Win + X на клавиатуре и выбрать в меню «Управление компьютером». В «Управление компьютером» выберите «Локальные пользователи и группы» на левой панели. Альтернативный способ открытия локальных пользователей и групп — запустите lusrmgr. команда msc.

Как включить несколько пультов дистанционного управления в Windows 10?

Включить несколько сеансов RDP

  1. Войдите на сервер, на котором установлены службы удаленных рабочих столов.
  2. Откройте начальный экран (нажмите клавишу Windows) и введите gpedit. …
  3. Перейдите в Конфигурация компьютера> Административные шаблоны> Компоненты Windows> Службы удаленных рабочих столов> Узел сеансов удаленных рабочих столов> Подключения.

Как получить несколько лицензий на Windows 10?

Позвоните в Microsoft по телефону (800) 426-9400. или нажмите «Найти авторизованного реселлера» и введите свой город, штат и почтовый индекс, чтобы найти ближайшего к вам реселлера. В службе поддержки клиентов Microsoft или у авторизованного продавца подскажут, как купить несколько лицензий Windows.

Создание пользователей в 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 10
  • Как упростить меню пуск windows 10
  • Как упростить вход в систему windows 10
  • Как упростить внешний вид windows 10
  • Как упростить windows 10 для максимальной производительности