![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Ошибки в Powershell при создании пользователей |
|
PowerShell - Ошибки в Powershell при создании пользователей
|
Пользователь Сообщения: 75 |
Что я делаю не так?
Взял скрипт отсюда 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
|
Профиль | Отправить PM | Цитировать ratibor79, Попробовал твой скрипт. Та же проблема. Если какое-нибудь поле пустое то не создается этот пользователь. Может быть кто-нибудь знает решение проблемы с примером?
|
Отправлено: 14:14, 17-01-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 75
|
Профиль | Отправить 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
|
Профиль | Отправить 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 Задача. Беря из CSV данные создать несколько OU и поместить вних пользователей(так же создав заново). |
Отправлено: 23:41, 01-06-2012 | #13 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать У Вас всегда в файле csv только один пользователь?
1) $dataSource=import-csv "newusers.csv" - зачем два раза? 2) Почему бы не сделать проверку прежде,чем создать OU? 3) $OU=$dataRecord.OU - выполнится,только при условии,что ТОЛЬКО 1 пользователь в csv файле? Я бы вообще бы выкинул: |
Отправлено: 13:09, 02-06-2012 | #14 |
Новый участник Сообщения: 4
|
Профиль | Отправить 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
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Wow! Спасибо, все получилось. Здорово.
А как интерпритировать вот эту конструкцию? LDAP://OU={0},{1}" |
Отправлено: 21:32, 04-06-2012 | #17 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать -f является сокращением на [String]::Format - более подробно http://msdn.microsoft.com/ru-ru/libr...ng.format.aspx
{X} - является индексом и начинается с нуля Синтаксис - {index[,alignment][:formatString]} |
Отправлено: 23:52, 04-06-2012 | #18 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Спасибо. Большое. Правда ничего не понял. Не силен в програмировании и скриптинге, надо будет серьезнее это изучить.
|
Отправлено: 20:04, 06-06-2012 | #19 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|