Импорт пользователей CSV с помощью скрипта PowerShell
Моя цель - импортировать пользователей из файла CSV в Active Directory с помощью простого скрипта PowerShell. Несмотря на это, я сталкиваюсь с синтаксической ошибкой, как показано ниже.
Обновлено: формат столбца CSV
имя, фамилия, НУ Стивен, Boone, Управление Родни, Фишер, Менеджер по продажам Тейлор, Баутиста, Управление Натан Моррис, Управление
Работаем и решаем: код PowerShell
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: имя объекта имеет неверный синтаксис В C:\Script.ps1:9 char:5 + New-ADUser -Name "$name" -Path "$OU" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (CN= Тайлер Блэр, Управление: Строка) [New-ADUser], ADException + FullyQualifiedErrorId:ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser
Не уверен, где у меня ошибка. Насколько я понимаю, столбцы хорошо анализируются.
3 ответа
IMO, часть, которая не работает, это переменная -Path, которую вы предоставляете. Вам необходимо указать DN (отличительное имя) пути в активном каталоге. Самый простой способ сделать это - получить DN пользователя и получить DN родительского контейнера.
Что-то вроде этого:
-Path 'OU = Новые учетные записи пользователей,OU= Пользователи,DC= компост,DC= есть,DC= вонючий,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. Я оставил только соответствующие части.
Надеюсь, это поможет
Спасибо, ребята, мне удалось усовершенствовать свой сценарий и заставить все это работать.
Как я решил проблему
Как сказано выше, мне пришлось использовать формат пути X.500 для скрипта, чтобы найти, куда вводить пользователей. Для людей, имеющих те же проблемы, что и я, вот ссылка, которая помогла мне вместе с вышеуказанным: https://serverfault.com/questions/581383/new-aduser-path-syntax
Я также должен использовать -Name вместо -GivenName, а затем добавить вместе $user.name и $user.surname, чтобы имена в OU отображались, например, как Дейв Смит. Это зависит от ваших требований.
Кроме того, $($OU) нужно было объявить, чтобы скрипт знал OU для каждого соответствующего пользователя. (Предоставлено в.csv)
Как ввести правильный путь (X.500 Path Format)
Для тех, кто сталкивается с проблемой и натыкается на этот пост.
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) Dave и (EBGreen) EBGreen за их руководство.
Import-Module ActiveDirectory
Сохраните данные из NewUserssent.csv в переменной $ADUsers.
$ADUsers = Import-Csv C:\temp\newuserssent.csv -Delimiter ";"
Определить имя участника-пользователя
$UPN = "bostonIT.int"
Перебрать каждую строку, содержащую сведения о пользователе, в файле CSV.
foreach ($User в $ADUsers) {
#Read user data from each field in each row and assign the data to a variable as below
$username = $User.username
$password = $User.password
$firstname = $User.firstname
$lastname = $User.lastname
$initials = $User.initials
$OU = $User.ou #This field refers to the OU the user account is to be created in
$email = $User.email
$streetaddress = $User.streetaddress
$city = $User.city
$zipcode = $User.zipcode
$state = $User.state
$country = $User.country
$telephone = $User.telephone
$jobtitle = $User.jobtitle
$company = $User.company
$department = $User.department
$description= $user.description
# Check to see if the user already exists in AD
if (Get-ADUser -F { SamAccountName -eq $username }) {
# If user does exist, give a warning
Write-Warning "A user account with username $username already exists in Active Directory."
}
else {
# User does not exist then proceed to create the new user account
# Account will be created in the OU provided by the $OU variable read from the CSV file
New-ADUser `
-SamAccountName $username `
-Description $description `
-UserPrincipalName "$username@$UPN" `
-Name "$firstname $lastname" `
-GivenName $firstname `
-Surname $lastname `
-Initials $initials `
-Enabled $True `
-DisplayName "$lastname, $firstname" `
-Path $OU `
-City $city `
-PostalCode $zipcode `
-Country $country `
-Company $company `
-State $state `
-StreetAddress $streetaddress `
-OfficePhone $telephone `
-EmailAddress $email `
-Title $jobtitle `
-Department $department `
-AccountPassword (ConvertTo-secureString $password -AsPlainText -Force) -ChangePasswordAtLogon $True
# If user is created, show message.
Write-Host "The user account $username is created." -ForegroundColor Green
}
}
Read-Host -Prompt «Нажмите Enter, чтобы выйти»