Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Не работает импорт пользователей в AD из CSV-файла

Ответить
Настройки темы
PowerShell - Не работает импорт пользователей в AD из CSV-файла

Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: fcdm25
Дата: 21-02-2014
Вложения
Тип файла: zip file.zip
(26.3 Kb, 10 просмотров)
Здравствуйте, сегодня решил загрузить пользователей в AD из csv. В интернете нашел много примеров, но они почему то не запускаются на моем сервере и выдает ошибку
Лог ошибки

Код: Выделить весь код
New-ADUser : Объект каталога не найден
C:\Users\Администратор\Desktop\script.ps1:18 знак:5
+     New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (CN=\ \ ,OU=Цент...с,DC=edu,DC=guu:String) [New-ADUser], ADIdentityNotFoundException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.NewADUser
 
New-ADUser : Объект каталога не найден
C:\Users\Администратор\Desktop\script.ps1:18 знак:5
+     New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (CN=\ \ ,OU=Цент...с,DC=edu,DC=guu:String) [New-ADUser], ADIdentityNotFoundException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.NewADUser
 
New-ADUser : Объект каталога не найден
C:\Users\Администратор\Desktop\script.ps1:18 знак:5
+     New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (CN=\ \ ,OU=Цент...с,DC=edu,DC=guu:String) [New-ADUser], ADIdentityNotFoundException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.NewADUser

Скрипт
Скрипт PS

Код: Выделить весь код
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path "C:\Users\Администратор\Desktop\user.csv"  
foreach ($User in $Users)  
{  
    if ($User.OU -eq "")  #если OU пустая создаем в Others
    {
        $OU = "OU=Others,DC=edu,DC=guu"  
    }
    else {
        $OU = "OU=Центр новых информационных технологий (ЦНИТ), OU=Подразделения\, обеспечивающие учебный процесс" + $User.OU + ",DC=edu,DC=guu"
    }
    $Password = $User.Password
    $Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName
    $UserFirstname = $User.FirstName
    $UserLastName = $User.LastName
    $JobTitle = $User.JobTitle
    $SAM= $User.Login + "@edu.guu"
    New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $User.FirstName -Surname  $User.LastName -Title $JobTitle  -AccountPassword  (ConvertTo-SecureString -AsPlainText "P@ssword2" -Force) -Enabled $true -Path $OU 
}

Так же во вложении есть пример нашего леса и csv файл (unicode).
csv-файл

Login,Password,LastName,FirstName,MiddleName,OU,JobTitle
user1,braY2sPe1,Иванов ,Антон,Анатольевич,Отдел телекоммуникационного обеспечения,Программист
user2,braY2sPe2,Петров,Антон,Алексеевич,Отдел телекоммуникационного обеспечения,Программист
user3,braY2sPe3,Сидоров,Антон,Олегович,Отдел телекоммуникационного обеспечения,Программист 1 категории

На DC включена функция обработки скриптов
Код: Выделить весь код
Set-ExecutionPolicy Unrestricted
Загружен модуль
Код: Выделить весь код
import-module activedirectory
Все данные введены через запятую. Пароль соответствует требованиям.
Кто может помочь с данной проблемой?

UPD0: Пробовал менять «;» на «,» результатов не принесло
UPD1:Заменил @password на "password"

Отправлено: 16:25, 20-02-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Сам скрипт полностью приведите.

Отправлено: 16:32, 20-02-2014 | #2



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

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


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Сам скрипт полностью приведите. »
Сам скрипт
Код: Выделить весь код
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path "C:\Users\Администратор\Desktop\user.csv"  
foreach ($User in $Users)  
{  
    if ($User.OU -eq "")  #если OU пустая создаем в Others
    {
        $OU = "OU=Others,DC=edu,DC=guu"  
    }
    else {
        $OU = "OU=Центр новых информационных технологий (ЦНИТ), OU=Подразделения\, обеспечивающие учебный процесс" + $User.OU + ",DC=edu,DC=guu"
    }
    $Password = $User.Password
    $Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName
    $UserFirstname = $User.FirstName
    $UserLastName = $User.LastName
    $JobTitle = $User.JobTitle
    $SAM= $User.Login + "@edu.guu"
    New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $User.FirstName -Surname  $User.LastName -Title $JobTitle  -AccountPassword  (ConvertTo-SecureString -AsPlainText "P@ssword2" -Force) -Enabled $true -Path $OU 
}

Последний раз редактировалось fcdm25, 21-02-2014 в 17:57.


Отправлено: 16:36, 20-02-2014 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Покажите вывод: $Users[0]

Отправлено: 16:56, 20-02-2014 | #4


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Покажите вывод: $Users[0] »
New-ADUser : Объект каталога не найден
C:\Users\Администратор\Desktop\script.ps1:18 знак:5
+ New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (CN=\ \ ,OU=Цент...с,DC=edu,DC=guu:String) [New-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.Act iveDirectory.Management.Commands.NewADUser

Отправлено: 17:06, 20-02-2014 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Заменить $OU,на:
Код: Выделить весь код
$OU = "OU=$($User.OU),OU=Центр новых информационных технологий (ЦНИТ), OU=Подразделения\, обеспечивающие учебный процесс,OU=GUU,DC=edu,DC=guu"

Отправлено: 17:33, 20-02-2014 | #6


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Заменить $OU,на: »
Код: Выделить весь код
Заменил выдал следующую ошибку
New-ADUser : Имя объекта имеет недопустимый синтаксис
C:\Users\Администратор\Desktop\script.ps1:18 знак:5
+     New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=\ \ ,OU=,OU=...U,DC=edu,DC=guu:String) [New-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser
Получился вот такой скрипт

Код: Выделить весь код
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path "C:\Users\Администратор\Desktop\user.csv"  
foreach ($User in $Users)  
{  
    if ($User.OU -eq "")  #если OU пустая создаем в Others
    {
        $OU = "OU=Others,DC=edu,DC=guu"  
    }
    else {
        $OU = "OU=$($User.OU),OU=Центр новых информационных технологий (ЦНИТ), OU=Подразделения\, обеспечивающие учебный процесс,OU=GUU,DC=edu,DC=guu"
    }
    $Password = $User.Password
    $Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName
    $UserFirstname = $User.FirstName
    $UserLastName = $User.LastName
    $JobTitle = $User.JobTitle
    $SAM= $User.Login + "@edu.guu"
    New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $User.FirstName -Surname  $User.LastName -Title $JobTitle  -AccountPassword  (ConvertTo-SecureString -AsPlainText "P@ssword2" -Force) -Enabled $true -Path $OU 
}

Отправлено: 17:38, 20-02-2014 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Вы привели файл, где разделитель запятая. Здесь же используется точка с запятой. Где правда?

Ps. Т.к. $User.OU -eq "" - Для объекта у которого нет свойства OU будет $false,а значение $User.OU пусто,то и путь формируется неправильный.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:00, 20-02-2014 | #8


Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kazun, большое спасибо. Скрипт заработал. Искренне Вам благодарен!!
Я бы хотел еще узнать можно ли как то дописать скрипт так, чтобы он проходил все ветки и сверял их с данными которые находятся в OU. Просто в интернете я не нашел поиска по лесу в AD
Просто проблема, что в файле CSV есть информация только о конечных подразделениях, а если их нет, то он отправлял бы пользователей в каталог Other

Последний раз редактировалось fcdm25, 20-02-2014 в 21:49.


Отправлено: 20:05, 20-02-2014 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Вопрос мне неясен,что конкретно требуется в итоге.

Для поиска в лесе - обращайтесь к глобальному каталогу по порту 3268-LDAP(3269 - LDAPS). Для поиска в глобальном каталоге используйте параметр -Server GC:3268,но следует учесть,что в GC реплицируется не все атрибуты.

Код: Выделить весь код
Get-ADUser -Filter "Name -eq 'Test User'" -Server GC:3268
Просто проблема, что в файле CSV есть информация только о конечных подразделениях, а если их нет, то он отправлял бы пользователей в каталог Other - Ваш скрипт уже делает эту проверку if ($User.OU -eq ""),при условии,что свойство есть,а оно будет если Import-Csv корректно отрабатывает.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:17, 20-02-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Не работает импорт пользователей в AD из CSV-файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Добавление информации из csv-файла в AD с обработкой IvanXXL Скриптовые языки администрирования Windows 12 23-07-2014 10:49
2012 R2 - [решено] Не работает импорт пользователей в AD из CSV-файла fcdm25 Windows Server 2012/2012 R2 1 21-02-2014 19:51
PowerShell - PowerShell: импорт данных в AD из файла Perersmeshnik Скриптовые языки администрирования Windows 2 20-02-2014 09:44
PowerShell - [решено] Импорт из CSV в AD с помощью PowerShell rox33 Скриптовые языки администрирования Windows 23 20-07-2012 15:45
PowerShell - Импорт пользователей с помощью POwerShell и CSV файла. Temafet Скриптовые языки администрирования Windows 19 18-01-2012 16:45




 
Переход