New-ADUser другие атрибуты без разбрызгивания для удобства чтения

#powershell #active-directory

#powershell #active directory

Вопрос:

 foreach ($Person in $People) {
    $NewUserParams = @{
        Name = $Person.Name
        Server = 'xxxx.com:389'
        Path = 'CN=Users,CN=addressBook,DC=xxxx,DC=com'
        Credential = $Credentials
        givenName = $Person.givenName
        otherAttributes = @{sn=$Person.sn}
    }
    New-ADUser @NewUserParams 
}
  

У меня есть много дополнительных атрибутов (otherAttributes), которые я хотел бы добавить, которые доступны для меня в формате New-ADUser -Name XXX -OtherAttributes @{sn= xxx} . Тем не менее, я пытаюсь использовать разбиение, чтобы сделать другие атрибуты более удобочитаемыми, наряду с другими требуемыми параметрами. Мне не нужно использовать разбрызгивание для всей команды, моей целью было разбить otherAttributes, чтобы это не была длинная строка, которая обернута. Идеи?

Комментарии:

1. Значение otherAttributes является хэш-таблицей. Вы можете обернуть его так же, как вы оборачиваете $NewUserParams хэш-таблицу.

2. Можете ли вы привести мне пример? Я пытался сделать это несколькими различными способами и потерпел неудачу. Я безуспешно пробовал следующие другие атрибуты = @{ sn =$Person.sn }

Ответ №1:

Значение otherAttributes является просто еще одной хэш-таблицей и может быть обернуто как любая другая хэш-таблица:

 $NewUserParams = @{
    'Name'            = $Person.Name
    'Server'          = 'server.example.com:389'
    'Path'            = 'cn=Users,cn=addressBook,dc=example,dc=com'
    'Credential'      = $Credentials
    'givenName'       = $Person.givenName
    'otherAttributes' = @{
        'sn' = $Person.sn
    }
}
  

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

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

Комментарии:

1. Я получаю следующую ошибку: New-ADUser: не удается проверить аргумент в параметре ‘OtherAttributes’. Аргумент равен null или элемент коллекции аргументов содержит нулевое значение. В строке:12 символ:12 New-ADUser @NewUserParams ~~~~~~~~~~~~~~ Информация о категории: недопустимые данные: (:) [New-ADUser], исключение привязки параметра к параметру FullyQualifiedErrorId : ошибка проверки аргумента параметра, Microsoft. ActiveDirectory.Management. Команды.NewADUser

2. В качестве параметра в New-ADUser другие атрибуты не установлены равными хэш-таблице, возможно, это связано? У меня нет проблем с выполнением вышеупомянутой команды без параметра otherAttirbutes или если я не выполняю разбрызгивание и устанавливаю -otherAttributes @{sn= $ Person}.

3. @JGillTech Учитывая ваш код, явно невозможно, чтобы значение OtherAttributes было равно null, поэтому вы проверили, что ни одно из значений вложенной хэш-таблицы не равно null? Также, пожалуйста, отредактируйте свой вопрос, если вам нужно предоставить дополнительную информацию. Код и ошибки в комментариях нечитаемы.

4. Да, ни одно из других значений не равно null. Я обновлю вопрос тем, что я пробовал, и результатом… что работает, а что нет.

5. Спасибо, я обнаружил ошибку при обновлении вопроса. Я забыл включить -Properties * при получении пользовательских объектов из AD 🙂