Импорт адресов электронной почты в рекламу

#powershell #active-directory

Вопрос:

Я использую сценарий powershell, чтобы попытаться импортировать адреса электронной почты в Active Directory. Вот сценарий, который я использую (полное раскрытие, я скопировал это с другого поста на этом сайте):

 Import-module ActiveDirectory
$Users = Import-CSV "C:UsersAdminDocumentsHPD_Users.csv"
ForEach($User in $Users) 
{
    Set-ADUser -Identity $User.UserName -EmailAddress $User.Email
}
 

Ошибка, которую я получаю, заключается в следующем:

 Set-ADUser : Cannot find an object with identity: 'Smith, John' under: 'DC=abc,DC=wxyz,DC=com'.
At C:UsersAdminDocumentsImport_AD_Email.ps1:5 char:5
      Set-ADUser -Identity $User.UserName -EmailAddress $User.Email
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : ObjectNotFound: (Smith, John:ADUser) [Set-ADUser], ADIdentityNotFoundException
      FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.SetAD 
   User
 

Я думаю, проблема в том, что у нас есть пользователи в определенном подразделении. Как мне указать это в сценарии?

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

1. Проблема, похоже, в том, что $user.UserName содержит пользователей DisplayName (похоже), а не их sAMAccountName . Вы можете это подтвердить?

Ответ №1:

Как уже упоминал Сантьяго, похоже, проблема здесь в том, что $User.UserName на самом деле DisplayName это атрибут в Active Directory.

Лучшим и наиболее эффективным способом сделать это было бы запустить его против sAMAccountName — но если все, к чему у вас есть доступ, находится DisplayName в вашем CSV, вы могли бы попробовать что-то в этом роде вместо этого;

 Import-module ActiveDirectory
$Users = Import-CSV "C:UsersAdminDocumentsHPD_Users.csv"

ForEach($User in $Users) 
{
    $ADUser = Get-ADUser -Filter { DisplayName -like $User.UserName } -Properties DisplayName
    Write-Host "Updating email for [$($ADUser.DisplayName)] to [$($User.Email)]"
    #Set-ADUser $ADUser -EmailAddress $User.Email -WhatIf
}
 

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

1. Хорошо, я попробовал это предложение, и оно все еще не работает, но выдает другую ошибку:

2. Get-ADUser : Свойство: ‘DisplayName’ не найдено в объекте типа: ‘System.Management. Автоматизация. PSCustomObject». В C:UsersAdminDocumentsImport_AD_Email_v2.ps1:6 символ:15 … $ADUser = Получить-Фильтр ADUser { Имя дисплея-как $User.Имя дисплея … ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : Недопустимый аргумент: (:) [Get-ADUser], Исключение аргумента Полностью квалифицированный идентификатор ошибки : ActiveDirectoryCmdlet:Система. Исключение аргумента,Microsoft. ActiveDirectory.Управление. Команды. Пользователь GetADUser Обновляет электронную почту для [] на [john.smith@abc.com]

3. Попробуйте вместо этого обновить Get-ADUser строку до этой; $ADUser = Get-ADUser -Filter { DisplayName -like $User.UserName } -Properties DisplayName У меня сейчас нет ее под рукой, чтобы проверить, извините.

Ответ №2:

Наконец — то он заработал с помощью sAMAccountName. Вот мой окончательный сценарий:

 Import-module ActiveDirectory
$Users = Import-CSV "C:UsersAdminDocumentsHPD_Users3.csv"
ForEach($User in $Users) 
{
    Set-ADUser -Identity $User.sAMAccountName -EmailAddress $User.Email
}
 

И мой CSV-файл выглядел так:

 Email,sAMAccountName 
john.smith@abc.com,jsmith 
jane.doe@abc.com,jdoe