Моя цель - импортировать пользователей из файла CSV в Active Directory с помощью простого сценария PowerShell. Несмотря на это, я сталкиваюсь с синтаксической ошибкой, как показано ниже.
name,surname,ou Steven,Boone,Management Rodney,Fisher,Sales Taylor,Bautista,Management Nathan,Morris,Management
Import-Module ActiveDirectory
$ADDSUsers = Import-Csv C:\0469697M_gxt.csv
foreach ($user in $ADDSUsers) {
$Name = $user.name + " " + $user.surname
$OU = $user.ou
$OUPath = "OU=$($OU),dc=intgxt,dc=allaboutfood,dc=com,dc=mt"
#Creating New AD Users
New-ADUser -Name $Name -Path $OUPath
}
New-ADUser : The object name has bad syntax
At C:\Script.ps1:9 char:5
+ New-ADUser -Name "$name" -Path "$OU"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Tyler Blair,Management:String) [New-ADUser], ADException
+ FullyQualifiedErrorId :ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser
Не уверен, где у меня ошибка. Насколько я понимаю, столбцы разбираются хорошо.
Да, у меня есть столбец ou, но не столбец DC. В этой ошибке Management - это подразделение, но я не знаю, что такое Management: String. Какие предложения у вас есть @TessellatingHeckler?
Пожалуйста, опубликуйте образец CSV. Не стесняйтесь менять имена, но постарайтесь сохранить структуру нетронутой. Сделайте это, отредактировав свой вопрос не как комментарий.
@EBGreen Обновил мои столбцы CSV и добавил некоторые данные - Спасибо за вашу помощь :)
Ваш CSV-канал разделен, разделен запятыми или разделен табуляцией. Ваш пример выглядит так, как будто заголовки разделены вертикальной чертой (вроде), а данные разделены табуляцией. Ваш пример кода подразумевает, что он разделен запятыми.
О, это было просто форматирование в StackOverflow - это действительно разделение запятыми
@EBGreen Вот как это выглядит в исходном формате: имя, фамилия, оу Стивен, Бун, Менеджмент Родни, Фишер, Сэйлс Тейлор, Баутиста, Менеджмент Натан, Моррис, Менеджмент
Похоже, -Path должен иметь полный путь к формату X.500 - документы docs.microsoft.com/en-us/powershell/module/addsadministratio n /… и примеры serverfault.com/questions/581383/new-aduser-path-syntax
@TessellatingHeckler Хорошо, я обновил код в исходном посте. Допустим, у меня есть домен - intgxt.allaboutfood.com.mt. Как мне разобрать это в $ Container? intgxt.allaboutfood.com.mt, являющийся доменом, тогда с подразделениями под ним называются: - Учетные записи - Управление - Ура продаж
Спасибо. Решено, проверьте ответы





IMO, часть, которая не работает, - это переменная -Path, которую вы предоставляете. Вам необходимо указать DN (отличительное имя) пути в активном каталоге. Самый простой способ сделать это - получить DN пользователя и получить DN родительского контейнера.
Что-то вроде этого:
-Path 'OU = New User Accounts, OU = Users, DC = compost, DC = is, DC = smelly, DC = com'
Кроме того, я бы посоветовал вам привыкнуть к одинаковому разделению строк каждый раз и придерживаться его. Одиночные и двойные кавычки действуют по-разному. Вам не нужно отделять имена полей от исходного .csv, если нет пробелов.
Если вы используете отдельные контейнеры, просто создайте родительский путь для новый пользовательский объект на лету.
$ OU
Рабочим примером этого может быть:
Import-Module ActiveDirectory
$ADDSUsers = Import-Csv C:\0469697M_gxt.csv
$Creation_PW = Read-Host -AsSecureString -Prompt "Choose a password"
foreach ($user in $ADDSUsers) {
$Container = "OU=$($OU),OU=Users,DC=contoso,DC=com"
$FirstName = $user.name
$LastName = $user.surname
$Account_Name = "$($FirstName) $($LastName)"
New-ADUser -ChangePasswordAtLogon $true -Enabled $true -Path $Container -GivenName $FirstName -Surname $LastName -Name $Account_Name Description $Description -AccountPassword $Creation_PW }
($ Creation_PW должен быть SecureString)
Я вытащил разделы из сценария массового создания учетных записей, который я использую для своей организации. Мы делаем их время от времени. Вы можете указать все виды атрибутов при создании, в зависимости от вашей схемы AD. Я оставил только нужные части.
Надеюсь, это поможет
Хорошо, я обновил код в исходном посте. Допустим, у меня есть домен - intgxt.allaboutfood.com.mt. Как мне разобрать это в $ Container? intgxt.allaboutfood.com.mt, являющийся доменом, тогда с подразделениями под ним называются: - Учетные записи - Управление - Ура продаж
Рад, что у тебя все работает. Как вы уже догадались, ключом был путь LDAP. Извините, что оставил вас висеть на висящей переменной. Мне пришлось дезинфицировать свой сценарий из-за того, где я работаю. Я использую этот веб-сайт уже некоторое время и рад, что могу поделиться чем-то для других.
Нет проблем, @Dave. Также спасибо за вашу помощь в защите страны, сэр :) Я очень ценю вашу помощь
Спасибо, ребята, мне удалось усовершенствовать свой сценарий, и все заработало.
Как было сказано выше, мне пришлось использовать формат пути X.500 для сценария, чтобы найти, куда вводить пользователей. Для людей, у которых такие же проблемы, как и у меня, вот ссылка, которая помогла мне вместе с приведенным выше: https://serverfault.com/questions/581383/new-aduser-path-syntax
Мне также нужно использовать -Name вместо -GivenName, а затем добавить $ user.name и $ user.surname вместе, чтобы имена в OU отображались, например, как Dave Smith. Это зависит от ваших требований.
Кроме того, необходимо было объявить $ ($ OU), чтобы сценарий знал OU для каждого соответствующего пользователя. (Предоставляется в формате .csv)
Для всех, кто столкнулся с проблемой и наткнулся на этот пост.
OU > Domain Name
Точки в имени домена разделяются dc = Например:
Admin Organizational Unit in Contoso.com Domain
$OUPath = "OU=Admin,dc=Contoso,dc=com"
HR Organizational Unit in MyOrganization.co.uk Domain
$OUPath = "OU=HR,dc=MyOrganization,dc=co,dc=uk"
Import Organizational Unit in .CSV File
$OUImport = $user.ou (or whatever your ou column name is)
$OUPath = "OU=($OUImport),dc=MyOrganization,dc=co,dc=uk"
Import-module activedirectory
$ADDSUsers = Import-csv C:\0469697M_gxt.csv
write-host "Start Process"
write-host "-------------------------------------"
ForEach ($user in $ADDSUsers){
$Name = $user.name + " " + $user.surname
$OU = $user.ou
$OUPath = "OU=$($OU),dc=intgxt,dc=allaboutfood,dc=com,dc=mt"
#Creating New AD Users
New-ADUser -Name $Name -Path $OUPath
}
Особая благодарность (Dave) https://stackoverflow.com/users/9712731/dave и (EBGreen) https://stackoverflow.com/users/1358/ebgreen за их руководство.
«Насколько я понимаю, столбцы разбираются хорошо.» - я предполагаю, что нет.
NotSpecified: (CN=Tyler Blair,Management:String)сообщает мне, что анализатор CSV не справляется с данными OU, которые должны быть похожи наCN=Tyler Blair,OU=This,DC=example,DC=com, а ваш CSV не имеет этого цитируемого, поэтому Import-CSV разбивает OU на запятые, как если бы они были разными столбцами, и то вы создаете объект без полного пути, и это не удается. Предположение, потому что ваш код не выглядит некорректным. В качестве альтернативы, возможно, подразделение в вашей электронной таблице не является полным путем и должно быть