Создание скрипта сыпучих материалов AD проблемы - PullRequest
0 голосов
/ 05 марта 2020

Я написал скрипт Bulk Ad, но по какой-то причине он не работает. Кто-нибудь может мне помочь ?

$ADUsers = Import-csv C:\Users\Deng\Desktop\newusers.csv

foreach ($User in $ADUsers)
{
$Username  = $Users.username
   $Firstname = $Users.firstname
   $Password  = $Users.password
   $Lastname  = $Users.lastname
   $OU        = $Users.ou

         New-ADUser `
        -SamAccountName $Username `
        -UserPrincipalName $Username@aptushealth.com `
        -Name $Firstname $Lastname `
        -GivenName $Firstname `
        -Surname $Lastname `
        -Enabled $True `
        -ChangePasswordAtLogon $false `
        -DisplayName $Lastname, $Firstname `
        -Path $OU `
        -AccountPassword (convertto-securestring $Password -AsPlainText -Force)
}

Я получаю эту ошибку ниже:

ConvertTo-SecureString: Невозможно привязать аргумент к параметру 'String', поскольку он равен нулю. В строке: 24 символа: 54 + ... -AccountPassword (convertto-securestring $ Password -AsPlai ... + ~~~~~~~~~ + CategoryInfo: InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Microsoft.PowerShell.Commands.ConvertToSecureStringCommand

также вижу содержимое CSV

usersname firstname password lastname ou
efranklin Edward P@s$word Franklin "OU=PII Users,DC=PII,DC=net"
bjackson Bill P@s$word Jackson "OU=PII Users,DC=PII,DC=net"

Я сделал изменения - это то, что я сделал, и это Дэвид 1013 *

ConvertTo-SecureString: Невозможно привязать аргумент к параметру 'String', поскольку он имеет значение null. В строке: 24 символа: 54 + ... -AccountPassword (convertto-securestring $ Password -AsPlai ... -

все еще получает ту же ошибку

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Добавление дополнительных советов.

В исходном коде вы присваивали неправильные значения. Как уже упоминали несколько участников (см. @Vad Answer ) $ Пользователи были бы нулевыми в представленном вами коде. Имеет смысл, что может привести к ошибке, которая конкретно ссылается на нулевое значение. Ошибка очень буквальная ConvertTo-SecureString не примет нулевое значение для параметра -String.

Вы использовали итерационную переменную $ User, но сделали переменные назначения, такие как:

$Password = $Users.password

$ User s (обратите внимание на "s") будет нулевым в вашем образце, и вы должны вместо этого использовать $User.password!

Теперь, если вы все это сделали и все еще получаете ошибку. Мой совет - сделать шаг назад и проверить данные перед выполнением New-ADUser. Я бы сначала прокомментировал New-ADUser. Затем вы можете выполнять проверки, такие как:

$ADUsers = Import-Csv C:\Users\Deng\Desktop\newusers.csv
$ADUsers | Where-Object($_.Password -eq $null) | Format-Table

Это даст вам все объекты с нулевым свойством пароля. Это необходимо исправить, прежде чем пытаться использовать содержимое в качестве входных данных для New-ADUser.

Примечание. Вы также можете использовать Excel для такого рода проверки.

Пароль - только один из свойства. Я бы повторил тест со ссылкой на другие свойства в предложении Where{}. Вы должны убедиться, что данные полностью чисты!


Оригинальные комментарии, дополняющие другие ответы:

Я думаю, что на этот вопрос уже дан ответ, но для удобства чтения я думаю, что это хорошо сценарий использования для разбивки параметров.

Непроверенный пример:

$ADUsers = Import-Csv C:\Users\Deng\Desktop\newusers.csv

foreach ($User in $ADUsers)
{
    $Params =
    @{
        samAccountName        = $User.username
        UserPrincipalName     = ($User.username + '@aptushealth.com')
        GivenName             = $User.FirstName
        SurName               = $User.LastName
        Name                  = ($User.FirstName + ' ' + $User.lastname)
        DisplayName           = ($User.lastname + ' ' + $User.FirstName)
        Enabled               = $true
        Path                  = $User.ou
        AccountPassword       = (ConvertTo-SecureString $User.password -AsPlainText -Force)
        ChangePasswordAtLogon = $false

    }

    New-ADUser @Params
}

Это спасает вас от выхода из обратного тика, который обычно считается опасным.

0 голосов
/ 05 марта 2020

Ваша ошибка в том, что в foreach l oop вы работаете с объектом $user , а не $users, поэтому вы должны написать:

   $Username  = $User.username
   $Firstname = $User.firstname
   $Password  = $User.password
   $Lastname  = $User.lastname
   $OU        = $User.ou

Import-Csv read file row по строке, поэтому первая строка должна содержать имена столбцов, такие как:

username;firstname;password;lastname;ou

Тогда могут быть ваши данные:

efranklin;Edward;P@s$word;Franklin;"OU=PII Users,DC=PII,DC=net"

Дополнительно У вас должно быть что-то подобное ( и не забудьте, что в csv файле должен быть разделитель ';' !!!!! разделяющий параметры):

$ADUsers = Import-csv C:\Users\Deng\Desktop\newusers.csv -Delimiter ";"

foreach ($User in $ADUsers){
   $Username  = $User.username
   $Firstname = $User.firstname
   $Password  = $User.password
   $Lastname  = $User.lastname
   $OU        = $User.ou
New-ADUser -SamAccountName $Username -UserPrincipalName ($Username+'@aptushealth.com') -Name ($Firstname+' '+$Lastname) -GivenName $Firstname -Surname $Lastname -Enabled $True -ChangePasswordAtLogon $false -DisplayName ($Lastname+' '+$Firstname) -Path $OU -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force)            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...