#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