Импорт пользователей 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, чтобы выйти»

Другие вопросы по тегам