Powershell создание пользователя ad через excel
Здравствуйте и спасибо, что пригласили меня на мой первый пост. У меня возникают трудности с написанием того, что кажется простым сценарием, но оказывается намного сложнее. HR просто обновляет лист XLSX (она предпочитает, чтобы он был в Excel), поэтому я нашел команду PS, которая может захватить и импортировать ее (import-excel) - и он берет каждый объект, и я могу поместить его в переменную и просмотреть его как ниже только с этими полями . В конечном итоге я пытаюсь использовать только «деловую электронную почту» и обновить менеджера с помощью поля «Электронный адрес менеджера».
Я могу легко обновить поле менеджера, используя SAMAccountName, но не поле электронной почты . Этот сценарий работает, если я вручную копирую SAMAccountNames в CSV .
Я пытаюсь автоматизировать все из XLSX и планировать его запуск каждую неделю, чтобы мы могли просто выгрузить файл XLSX в каталог и заставить его автоматически обновлять поле менеджера. Сценарий ниже представляет собой простой способ, как я хотел это сделать, но он не работает.
Я действительно ценю любую помощь заранее и через несколько часов у меня болит голова . Крис
2 ответа
Согласно моему комментарию .
Тем не менее, если вы говорите, что сотрудники отдела кадров просто сбрасывают файл, и вы хотите, чтобы процесс запускал указанный выше сценарий, установите файловая системаwacher PowerShell галерея Загрузить: FileSystemWatcher.ps1
Обновить
Когда вы читаете файл со свойствами, которые имеют пробелы, вы должны заключить их в кавычки.
В нормальном случае правильно отформатированный CSV-файл будет выглядеть следующим образом.
. и когда вы читаете этот файл, вам придется физически заключать в кавычки любое свойство, содержащее пробелы или специальные символы.
Итак, ваш целевой вариант использования командлета будет примерно таким .
Я наконец смог заставить это работать . Я уверен, что есть намного больше способов сделать это короче, но этот способ работает для меня . Import-Excel работает очень хорошо, но проблема заключалась в манипулировании этим атрибутом адреса электронной почты и преобразовать его в SamAccountName.
Очевидно, вы можете прочитать код ниже, но я хотел объяснить, почему я сделал это таким образом .
Самый простой способ создать нового пользователя в домене Active Directory – воспользоваться графической mmc оснасткой ADUC (Active Directory Users and Computers). Но в том случае, если в домене нужно завести сразу несколько учетных записей, их создание в ручном режиме может стать довольно утомительной для администратора процедурой. В этой статье мы рассмотрим пример автоматизации создания учетных записей пользователей в AD с помощью командлета PowerShell New-ADUser.
Используем командлет New-ADUser для создания новой учетной записи AD
Командлет New-ADUser входит в состав модуля Active Directory для PowerShell. Для использования этого модуля, нужно установить на компьютере соответствующую ОС версию RSAT и включить компонент Active Directory Module for Windows PowerShell.
Для импорта модуля в сессию PowerShell выполните команду:
Полный синтаксис командлета New-ADUser можно получить с помощью команды
Get-Command New-ADUser –Syntax
В минимальной версии для создания новой учетной записи пользователя в AD достаточно указать только его имя.
New-ADUser testuser1
Как вы видите, новая учетная запись пользователя создалась в контейнере 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:
Массовое создание новых пользователей в AD из CSV скриптом PowerShell
В том случае, если в Active Directory нужно создать сразу большое количество пользователей, удобнее сохранить список пользователей в формате CSV (Excel) файла, а затем запустить специальный PowerShell скрипт. В данном файле нужно заполнить все значимые для вас атрибуты пользователей.
К примеру, мой Excel файл с пользователями состоит из 9 колонок и имеет следующий формат шапки:
Заполните данные пользователей и сохраните Exсel файл с в формате CSV c запятыми, в качестве разделителей. Кодировка файла должна быть обязательно UTF-8 (важно!). Кроме того, т.к. в значениях столбца OU есть запятые, нужно экранировать их, взяв в двойные кавычки.
Теперь можно импортировать данный CSV файл (new_ad_users2.csv) и создать в домене новых пользователей. Код готового PowerShell скрипта представлен ниже:
После выполнения скрипта, откройте консоль ADUC, разверните указанный контейнер и убедитесь, что в AD появились новые учетки пользователей (отследить создание учетных записей в AD можно так: Получение списка учетных записей AD, созданных за последние 24 часа.)
Создаваемые учетные записи можно сразу добавить в определенную группу AD с помощью командлета Add-AdGroupMember, для этого нужно немного модифицировать скрипт, добавив в цикле строку:
Add-AdGroupMember -Identity AllowPublicInet -Members $_.samAccountName
Или сразу установить фотографию пользователя в AD, чтобы она отображалась в Outlook и Lync:
Создание пользователей в Powershell можно выполнить через команду New-ADUser. Мы рассмотрим как создавать в определенной OU, с паролем, из CSV и с другими параметрами.
Если мы наберем просто команду, то нам предложат ввести логин и наш пользователь создастся отключенным в папке User:
Логин (Name) - это единственный обязательный параметр для заполнения. Оно соответствует полю, которое выделено на рисунке ниже:
Навигация по посту
Создание пользователя в Powershell с параметрами New-ADUser
У командлета есть много параметров (больше 60) и мы рассмотрим основные из них. Для того что бы увидеть все параметры выполните следующее:
Или если хотите найти конкретный параметр (в моем случае все где есть Name):
Обычно нам нужно создать учетку AD с паролем, именем и фамилией и она должна быть активна. Для создания пользователя AD с паролем используется другой командлет Powershell. Я объявлю пароль в переменной, но можно сразу и при создании пользователя:
Затем создадим пользователя:
- Name - логин
- GivenName - имя
- SurName - фамилия
- AccountPassword - пароль, который мы объявили в переменной
- Enbaled - делает пользователя активным
- UserPrincipleName - соответствует полю выделенному на рисунке ниже
Создание пользователя в Powershell в определенной OU используя New-ADUser Path
Для добавления пользователя в другой OU нужно использовать ключ Path. На примере домена domain.local и организационной единице Moscow путь будет выглядеть так:
Причем может появится ошибка:
new-aduser объект каталога не найден
Т.к. в пути вместо OU указывают контейнер CN.
Или если в нас вложенные OU:
Создание пользователей AD из CSV в Powershell New-ADUser
Я создал в Excel такой файл и сохранил как CSV:
Для того что бы импортировать файл есть командлет Import-Csv. Нужно обратить внимание какой разделитель (делимитер) в файле и у вас в системе. Увидеть это можно так:
Импорт и создание пользователей делается так:
Сложение в Path сделано для демонстрации такой возможности и не является обязательным.
У меня так же была ошибка:
- new-aduser указанное имя не является корректным именем пользователя
- New-ADUser : The object name has bad syntax
- New-ADUser : Directory object not found
Само собой мы можем в Csv файле создать больше колонок. Например мы можем там создать и пароль, что бы у всех пользователей он был разный, но нужно будет обязательно сконвертировать его через ConvertTo-SecureString.
Если вы не уверены в том, что все данные корректны, то можете добавить ключ -WhatIf, который покажет результаты выполнения команды, но не выполнит ее физически.
Приветствую, Хабражители. Cегодня я хотел бы с Вами поделиться скриптом для импорта пользователей в Active Directory. Мой начальник сказал, что пора поднимать домен, а так же добавить в него около 2000 пользователей. Домен до этого я делал, но вот с импортом пользователей пришлось повозиться, так как делал это впервые. В данном посте я хотел бы рассказать как я это реализовывал
Сначала установил и настроил WS 2012R2 как DC и после этого встал вопрос как добавлять пользователей в него. Список сотрудников у меня был в xls файле и тогда я решил, чтобы не забивать пользователей вручную, оптимизировать это с помощью PowerShell.
В интернете много примеров, но они мало чем подходили для моего решения, некоторые были кусками кода, другие вовсе не работали с WS2012R2, а третьи добавляли пользователей в определенные каталоги, а мне необходимо было раскидать пользователей в более чем 70 каталогов. Так же встала задача как сделать CSV — файл для PowerShell в соответствии с его стандартами.
Сотрудник | Подразделение | Должность |
Петров Владимир Иванович | Бухгалтерия | Помощник бухгалтера |
Иванов Иван Иванович | ДИТ | Программист |
В первую очередь необходимо разделить ФИО на разные столбцы и оказалось, что в MS Excel 2013 есть достаточно интересный инструмент для этого под названием «Текст по столбцам» который находится во вкладке ДАННЫЕ.
После этого был принят формат логинов для пользователей и было принято решение, что это будут первые буквы от имени и отчества и после нижнего подчеркивания полностью фамилия (например: aa_petrov). Для этого пришлось транслитерировать их с помощью VB-скрипта.
А также добавлена функция для генерации данных логинов:
Пароли были сгенерированны с помощью фразы и набора случайных символов:
После этого сохранил файл в .csv с 6 заголовками Login; Password; LastName; FirstName; MiddleName; OU; JobTitle и изменил кодировку файла в Unicode, так как с ANSI часто бывают проблемы.
Затем написал следующий скрипт PS:
Читайте также: