Импорт пользователей CSV с помощью скрипта PowerShell - PullRequest
0 голосов
/ 27 апреля 2018

Моя цель - импортировать пользователей из файла CSV в Active Directory с помощью простого скрипта PowerShell. Несмотря на это, я сталкиваюсь с синтаксической ошибкой, как показано ниже.

Обновлено: формат столбца CSV

name,surname,ou
Steven,Boone,Management
Rodney,Fisher,Sales
Taylor,Bautista,Management
Nathan,Morris,Management

Работа и решение: код 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 : 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

Не уверен, где у меня ошибка. Насколько я понимаю, столбцы хорошо анализируются.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Спасибо, ребята, мне удалось усовершенствовать свой сценарий и заставить его все работать.

Как я решил проблему

Как сказано выше, мне пришлось использовать формат пути X.500 для скрипта, чтобы найти, куда вводить пользователей. Для людей, имеющих те же проблемы, что и я, вот ссылка, которая помогла мне вместе с выше: https://serverfault.com/questions/581383/new-aduser-path-syntax

Я также должен использовать -Name вместо -GivenName, а затем добавить $ user.name и $ user.surname вместе, чтобы имена в OU отображались, например, как Дейв Смит. Это зависит от ваших требований.

Кроме того, $ ($ OU) нужно было объявить, чтобы скрипт знал OU для каждого соответствующего пользователя. (Предусмотрено в .csv)

Как ввести правильный путь (формат пути X.500)

Для всех, кто столкнулся с проблемой и наткнулся на этот пост.

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 за руководство.

0 голосов
/ 28 апреля 2018

IMO, часть, которая не работает, это переменная -Path, которую вы предоставляете. Вам необходимо указать DN (отличительное имя) пути в активном каталоге. Самый простой способ сделать это - захватить DN пользователя и получить DN родительского контейнера.

Примерно так:

-Path 'OU = новые учетные записи пользователей, OU = пользователи, DC = компост, DC = есть, DC = вонючий, DC = ком'

Кроме того, я бы посоветовал вам привыкнуть к разделению строк каждый раз и придерживаться его. Одинарные и двойные кавычки действуют по-разному. Вам не нужно отделять имена полей от вашего исходного .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. Я оставил только соответствующие части.

Надеюсь, это поможет

...