Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
PowerShell - Ошибки в Powershell при создании пользователей

Пользователь


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

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


Что я делаю не так?
Взял скрипт отсюда http://www.howtogeek.com/50187/how-t...th-powershell/

тупо скопировал его
поменял домен
$objOU=[ADSI]“LDAP://OU=abc,DC=contoso,DC=com”
$dataSource=import-csv “users.csv”
foreach($dataRecord in $datasource) {
$cn=$dataRecord.FirstName + ” ” + $dataRecord.LastName
$sAMAccountName=$dataRecord.FirstName + “.” + $dataRecord.LastName
$givenName=$dataRecord.FirstName
$sn=$dataRecord.LastName
$sAMAccountName=$sAMAccountName.ToLower()
$displayName=$sn + “, ” + $givenName
$userPrincipalName=$sAMAccountName + “@contoso.com”
$objUser=$objOU.Create(“user”,”CN=”+$cn)
$objUser.Put(“sAMAccountName”,$sAMAccountName)
$objUser.Put(“userPrincipalName”,$userPrincipalName)
$objUser.Put(“displayName”,$displayName)
$objUser.Put(“givenName”,$givenName)
$objUser.Put(“sn”,$sn)
$objUser.SetInfo()
$objUser.SetPassword(“P@assw0rd”)
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
}

так выглядит csv
FirstName;LastName
Avis;Flamm
Kurt;Pharris


В результате получаю кучу ошибок

Исключение при вызове "Create" с "2" аргументами: "Был передан недопустимый путь службы каталогов
"
C:\ADscripts\testscript.ps1:11 знак:23
+ $objUser=$objOU.Create <<<< (“user”,”CN=”+$cn)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "Put" с "2" аргументами: "Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))"
C:\ADscripts\testscript.ps1:15 знак:13
+ $objUser.Put <<<< (“givenName”,$givenName)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "Put" с "2" аргументами: "Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))"
C:\ADscripts\testscript.ps1:16 знак:13
+ $objUser.Put <<<< (“sn”,$sn)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "SetInfo" с "0" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:17 знак:17
+ $objUser.SetInfo <<<< ()
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "SetPassword" с "1" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:18 знак:21
+ $objUser.SetPassword <<<< (“P@assw0rd”)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "InvokeSet" с "2" аргументами: "Свойства службы каталогов не могут быть найдены в кэше.
"
C:\ADscripts\testscript.ps1:19 знак:26
+ $objUser.psbase.InvokeSet <<<< (“AccountDisabled”,$false)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation

Исключение при вызове "SetInfo" с "0" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:20 знак:17
+ $objUser.SetInfo <<<< ()
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "Create" с "2" аргументами: "Был передан недопустимый путь службы каталогов
"
C:\ADscripts\testscript.ps1:11 знак:23
+ $objUser=$objOU.Create <<<< (“user”,”CN=”+$cn)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "Put" с "2" аргументами: "Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))"
C:\ADscripts\testscript.ps1:15 знак:13
+ $objUser.Put <<<< (“givenName”,$givenName)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "Put" с "2" аргументами: "Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))"
C:\ADscripts\testscript.ps1:16 знак:13
+ $objUser.Put <<<< (“sn”,$sn)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "SetInfo" с "0" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:17 знак:17
+ $objUser.SetInfo <<<< ()
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "SetPassword" с "1" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:18 знак:21
+ $objUser.SetPassword <<<< (“P@assw0rd”)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Исключение при вызове "InvokeSet" с "2" аргументами: "Свойства службы каталогов не могут быть найдены в кэше.
"
C:\ADscripts\testscript.ps1:19 знак:26
+ $objUser.psbase.InvokeSet <<<< (“AccountDisabled”,$false)
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation

Исключение при вызове "SetInfo" с "0" аргументами: "Указан недопустимый dn-синтаксис. (Исключение из HRESULT: 0x80072032)"
C:\ADscripts\testscript.ps1:20 знак:17
+ $objUser.SetInfo <<<< ()
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

Отправлено: 13:34, 29-12-2011

 

Пользователь


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

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


ratibor79, Попробовал твой скрипт. Та же проблема. Если какое-нибудь поле пустое то не создается этот пользователь. Может быть кто-нибудь знает решение проблемы с примером?

Отправлено: 14:14, 17-01-2012 | #11



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

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


Пользователь


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

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


Решил пойти другим путем используя командлеты от Quest.
Установил Quest отсюда http://www.quest.com/powershell/activeroles-server.aspx
дальше пишем
Add-PSSnapin quest.ActiveRoles.admanagement

Написал скрипт
Get-Content "c:\ADscripts\Создание пользователей.csv" | ConvertFrom-csv -Delimiter ";" | ForEach-Object {New-QADUser -name $_.cn -sam $_.sAMAcountName -FirstName $_.Имя -LastName $_.Фамилия -org $_.OU -password $_.password -Office $_.Комната -PhoneNumber $_.Телефон -StreetAddress $_.Улица -City $_.Город -Fax $_.Факс -Title $_.Должность -Department $_.Отдел -Company $_.Организация -DisplayName $_.cn -UserPrincipalName ($_.sAMAcountName + "@contoso.com") -Email ($_.sAMAcountName + "@contoso.com") |Set-QADUser -userMustChangePassword $true}

Все работает если запускать из powergui.
Но ничего не работает если запускать из "выполнить с помощью powershell"

Нашел два решения этой проблемы:
1-е если добавлять в скрипт Add-PSSnapin quest.ActiveRoles.admanagement в начало.
Или в реестре правим на:
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\Выполнить с помощью PowerShell\command]
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" "-NoExit" "-ImportSystemModules" "-file" "%1\"

Но оба этих решения сильно замедляют выполнение скрипта. Может быть есть еще какие-нибудь? Кто-нибудь сталкивался?

Отправлено: 14:07, 19-01-2012 | #12


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


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

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


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

Код: Выделить весь код
$objADSI=[ADSI]"LDAP://DC=contoso,DC=com"
$dataSource=import-csv "newusers.csv"
foreach($dataRecord in $dataSource) {
	$OU=$dataRecord.OU
	$objOU=$objADSI.Create("organizationalUnit","OU="+$OU)
	$objOU.SetInfo()
}

$dataSource=import-csv "newusers.csv"
$OU=$dataRecord.OU
$objADSI=[ADSI]"LDAP://OU=$OU,DC=contoso,DC=com"
foreach($dataRecord in $dataSource) {
	$CN=$dataRecord.cn
	$giveName=$dataRecord.firstName
	$objUser=$objADSI.Create("user","CN="+$CN)
	$objUser.Put("giveName",$giveName)
	$objUser.SetInfo()
}

Сам csv
Код: Выделить весь код
OU,cn,sAMAccountName,firstName,LastName
Отдел кадров,Александр Ивлев,alex.ivlev,ivlev,AL
Задача. Беря из CSV данные создать несколько OU и поместить вних пользователей(так же создав заново).

Отправлено: 23:41, 01-06-2012 | #13


Ветеран


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

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


У Вас всегда в файле csv только один пользователь?

1) $dataSource=import-csv "newusers.csv" - зачем два раза?
2) Почему бы не сделать проверку прежде,чем создать OU?
3) $OU=$dataRecord.OU - выполнится,только при условии,что ТОЛЬКО 1 пользователь в csv файле?

Я бы вообще бы выкинул:

Код: Выделить весь код
}

$dataSource=import-csv "newusers.csv"
$OU=$dataRecord.OU
$objADSI=[ADSI]"LDAP://OU=$OU,DC=contoso,DC=com"
foreach($dataRecord in $dataSource) {

Отправлено: 13:09, 02-06-2012 | #14


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


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

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


Пользователь конечно не один. И не одно OU будет.

1) При создании пользователя, необходимо подключиться к только что созданному OU. при включении ссылки $objOU
в "LDAP://OU=$objOU, то есть на только что созданную OU... вобщем пока еще раз ее не добавил, $objOU не имелл ссылки на созданное OU
и выдавал ошибку.
2)Согласен. Подскажите как? У меня была проблема, когда цикл проходил по второму пользователю, у него было уже создано OU, соответственно выдавал ошибку, что объект уже создан. Решил, забить на эту ошибку, т.к. незнаю как написать проверку.
3) Нет, должен выполняться постоянно создавая новое OU и добовляя туда пользователей (если конечно, ранее не создан уже).

Можно выкинуть, все что угодно, если подскажите как решить проблему :-)
Создать OU, заполнить параметрами, в новое OU добавить пользователей, группы, у которых в csv параметр OU совподает с только что созданным OU.
(вобщем разложить пользователей по OU и группам)

Отправлено: 17:24, 02-06-2012 | #15


Ветеран


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

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


Код: Выделить весь код
Function Test-Exists($path)
{
	-not [adsi]::Exists($path)
}

$objADSI=[ADSI]"LDAP://DC=contoso,DC=com"
$dataSource=import-csv "newusers.csv"

foreach($dataRecord in $dataSource) {
	$OU="LDAP://OU={0},{1}" -f $dataRecord.ou,$objADSI.distinguishedName.ToString()
	if(Test-Exists $ou)
	{
		$objOU=$objADSI.Create("organizationalUnit","OU="+$dataRecord.ou)
		$objOU.SetInfo()
	}
	else {$objOU = [ADSI]$OU}
	
	$CN=$dataRecord.cn
	$giveName=$dataRecord.firstName
	$sam=$dataRecord.sAMAccountName
	$user="LDAP://CN={0},{1}" -f $cn,($objOU.path.replace("LDAP://",""))
	
	if(Test-Exists $user)
	{
		$objUser=$objOU.Create("user","CN="+$CN)
		$objUser.Put("samaccountname", $sam)
		$objUser.Put("givenname",$giveName)
		$objUser.SetInfo()
	}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:54, 03-06-2012 | #16


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


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

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


Wow! Спасибо, все получилось. Здорово.
А как интерпритировать вот эту конструкцию?
LDAP://OU={0},{1}"

Отправлено: 21:32, 04-06-2012 | #17


Ветеран


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

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


-f является сокращением на [String]::Format - более подробно http://msdn.microsoft.com/ru-ru/libr...ng.format.aspx
{X} - является индексом и начинается с нуля

Синтаксис - {index[,alignment][:formatString]}

Код: Выделить весь код
PS >  "{0} + {1} = {2}"  -f 2,3,5
2 + 3 = 5
PS >  "|{0,10}|" -f 100
|       100|
PS >  "|{0,-10}|" -f 100
|100       |
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:52, 04-06-2012 | #18


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


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

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


Спасибо. Большое. Правда ничего не понял. Не силен в програмировании и скриптинге, надо будет серьезнее это изучить.

Отправлено: 20:04, 06-06-2012 | #19



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Импорт пользователей с помощью POwerShell и CSV файла. Temafet Скриптовые языки администрирования Windows 19 18-01-2012 16:45
При создании трансляции вэб-камеры Мозилла вылетает, при этом за что-то извиняется. vovikrus Хочу все знать 2 17-02-2010 19:03
Любой язык - [решено] Нужен скрипт cmd,vbs,PowerShell для проверки списка пользователей и их удаление из AD alex_frog Скриптовые языки администрирования Windows 6 22-07-2009 18:41
Ошибка - при создании нового подключения при сохранений логина и пароля пишет ошибку 1305 p.s-bagdan Microsoft Windows 2000/XP 1 09-10-2008 09:33
Router - Ошибка при создании сети Glamur Сетевое оборудование 3 03-10-2008 21:49




 
Переход