Вопрос не новый и ответов в Интернет можно найти массу.

На курсе по администрированию SharePoint 2010 этот вопрос постоянно возникает. Нужно создавать учетные записи служб, пользователей для тестирования доступа на сайт и пользователей для тестирования импорта профилей в SharePoint 2010.

Конечно, хочется автоматизировать этот процесс при помощи PowerShell. У себя на курсе я использую последние версии продуктов, то есть Windows Server 2008 R2.

Прежде, чем продолжить, хочу указать 2 ссылки (русскую и английскую) на сайт Скрипт Центра:

http://technet.microsoft.com/ru-ru/scriptcenter/

http://technet.microsoft.com/en-us/scriptcenter/

Можно воспользоваться ADSI (Active Directory Service Interface) для создания пользователя:

$OU = [ADSI] "LDAP://cn=Users,DC=infoworker,DC=loc"

$login = "maximov"

$LastName = "Максимов"

$FirstName = "Максим"

$u = $OU.Create("user","cn=$login")

$u.put("description", "пользователь")

$u.put("department", "ИТ")

$u.put("givenName", $FirstName)

$u.put("mail", "$login@mail.ru")

$u.put("physicalDeliveryOfficeName", "101")

$u.put("sn", $login)

$u.put("telephoneNumber", "1234567")

$u.put("title", "ИТ специалист")

$u.SetInfo()

$u.put("userPrincipalName", $login)

$u.put("sAMAccountName", $login)

$u.SetInfo()

$u.psbase.InvokeSet('AccountDisabled', $false)

$u.SetInfo()

$u.SetPassword("pass@word1")

 

Что делает этот скрипт?

  1. Получает доступ к контейнеру AD
  2. Создает нового пользователя
  3. Устанавливает свойства
  4. Задает пароль
  5. Активирует изначально отключенную учетную запись

Во-первых, где посмотреть все свойства пользователя, чтобы знать какие из них задать?

Когда Вы открываете окно свойств пользователя, то можете увидеть следующее:

А теперь перейдите в меню Пуск – Администрирование – Редактирование ADSI на контроллере домена. Раскройте контейнер Users и найдите нужного пользователя, откройте окно свойств. Для изучения могу предложить в окне свойств AD сначала проставить во все поля значения 1,2,3 и т.д., а потом в окне свойств ADSI просмотреть, какие названия свойств каким значениям соответствуют для идентификации нужных свойств. Кстати, не все свойства можно через оснастку Пользователи и компьютеры задать.

Теперь ещё вопрос – а нельзя ли как-то попроще команду выполнить? Можно! Интернет пестрит предложением использовать команду New-QADUser от компании Quest Software. Но зачем, если в Windows Server 2008 R2 есть модуль PowerShell ActiveDirectory.

Его можно импортировать в консоль командой Import-Module ActiveDirectory.

Разъяснения относительно различий модулей и Snapin-ов - http://msdn.microsoft.com/en-us/library/dd745031(v=vs.85).aspx

А в нем есть команды:

  1. Get-ADUser
  2. New-ADUser
  3. Remove-ADUser
  4. Set-ADUser
  5. Enable-ADAccount
  6. Set-ADAccountPassword
  7. И другие…

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

Import-Module activedirectory

$login = "maximov"

$LastName = "Максимов"

$FirstName = "Максим"

$pwd = ConvertTo-SecureString -AsPlainText "pass@word1" -Force

new-aduser $login -SamAccountName $login -GivenName $FirstName -Surname $LastName -DisplayName "$LastName $FirstName" -OtherAttributes @{mail="$login@infoworker.loc"; title="ИТ специалист"}

Get-ADUser $login | Set-ADAccountPassword -Reset -NewPassword @pwd

Get-ADUser $login | Enable-ADAccount

 

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

А теперь ещё один момент – как из подготовленного Excel файла прочитать таблицу пользователей и по ней создать учетные записи в AD.

Сначала создайте Excel файл примерно такого вида:

Потом сохраните файл либо в формате CSV, либо текст Unicode. Главное – чтобы кодировка в Unicode была.

В данном случае результат в файле выглядит так:

То есть значения разделены знаком табуляции. В PowerShell можно задать спец символ табуляции с одинарной кавычкой, которая находится на клавише с русской буквой Ё ([йо]).

Попробуйте выполнить следующий скрипт (допуская, соответствующий путь к файлу):

Import-Csv -Delimiter "`t" -Path "c:\users4.txt"

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

$users = Import-Csv -Delimiter "`t" -Path "c:\users4.txt"

$users | where {

$login = $_.login

$LastName = $_.LastName

$FirstName = $_.FirstName

$pwd = ConvertTo-SecureString -AsPlainText "pass@word1" -Force

new-aduser $login -SamAccountName $login -GivenName $FirstName -Surname $LastName -DisplayName "$LastName $FirstName" -OtherAttributes @{mail="$login@infoworker.loc"; title=$_.JobTitle; userPrincipalName=$login}

Get-ADUser $login | Set-ADAccountPassword -Reset -NewPassword @pwd

Get-ADUser $login | Enable-ADAccount

}

 

Допустим, Вы решили добавить в таблицу ещё одно поле – Manager (руководитель)

Можно сделать ещё один проход по записям для задания всем начальника:

$users | where {

get-aduser $_.login | Set-ADUser -Manager $_.manager

}

 

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

Удачи в скриптах! И начальниках!