Подробный гайд: Массовое изменение почты у группы пользователей в Active Directory

Пошаговая инструкция по массовому изменению электронной почты пользователей в Active Directory через PowerShell, CSV и графический интерфейс.

2026.05.06                  


Подробный гайд: Массовое изменение почты у группы пользователей в Active DirectoryПодробный гайд: Массовое изменение почты у группы пользователей в Active Directory Ниже представлены три основных способа изменения атрибута электронной почты (mail / EmailAddress) у множества пользователей в AD.


Способ 1: Через PowerShell с использованием CSV-файла (Рекомендуемый)

Этот метод даёт максимальный контроль и подходит для сложных сценариев.

Шаг 1: Подготовка CSV-файла

Создайте файл users_email.csv со следующей структурой:

SamAccountName,mail
ivanov,ivanov@company.ru
petrov,petrov@company.ru
sidorov,sidorov@company.ru

Важно:

заголовок SamAccountName должен точно совпадать с логином пользователя в домене.

Шаг 2: Запуск скрипта в PowerShell

# Импорт модуля AD (если не загружен)
Import-Module ActiveDirectory

# Массовое обновление атрибута mail
Import-Csv "C:\scripts\users_email.csv" | ForEach-Object {
    Set-ADUser -Identity $_.SamAccountName -Replace @{mail=$_.mail}
    Write-Host "Обновлено: $($_.SamAccountName) -> $($_.mail)"
}

Дополнительные параметры:

Параметр Описание
-Replace @{mail="..."} Заменяет значение атрибута mail
-EmailAddress "..." Альтернативный способ (работает с EmailAddress, а не mail)
-Add @{ProxyAddresses="smtp:..."} Добавляет SMTP-алиас для Exchange
-Clear mail Очищает атрибут почты

Важно:

Атрибут mail в AD не равен EmailAddress в Exchange. Для синхронизации с Exchange/Office 365 может потребоваться изменение обоих.


Способ 2: Массовое изменение по шаблону (без CSV)

Если нужно задать почту по единому правилу (например, логин@domain.com):

# Обновить почту всем пользователям в конкретном OU
$OU = "OU=Сотрудники,DC=company,DC=local"
$Domain = "company.ru"

Get-ADUser -Filter * -SearchBase $OU | ForEach-Object {
    $NewEmail = "$($_.SamAccountName)@$Domain"
    Set-ADUser -Identity $_ -Replace @{mail=$NewEmail}
    Write-Host "$($_.Name) -> $NewEmail"
}

Полезные фильтры:

# Только пользователи с пустым mail
Get-ADUser -Filter {mail -notlike "*"} -SearchBase $OU

# Исключить отключённые учётки
Get-ADUser -Filter {Enabled -eq $true} -SearchBase $OU

Способ 3: Через графический интерфейс (ADUC) — для небольших групп

  1. Откройте Active Directory Users and Computers (dsa.msc)
  2. Включите расширенные функции: меню View → Advanced Features
  3. Перейдите в нужное подразделение (OU)
  4. Выделите нескольких пользователей (Ctrl+клик или Shift+клик)
  5. ПКМ → Properties → вкладка Attribute Editor
  6. Найдите атрибут mail → нажмите Edit → введите значение → OK

Ограничение:

не все атрибуты поддерживают массовое редактирование в интерфейсе. Атрибут mobile, например, нельзя изменить группой.


Проверка и отладка

Просмотр текущего значения почты:

Get-ADUser -Identity ivanov -Properties mail | Select-Object Name, mail

Экспорт всех пользователей с почтой в CSV:

Get-ADUser -Filter * -Properties mail, EmailAddress | 
    Select-Object Name, SamAccountName, mail, EmailAddress | 
    Export-Csv "C:\temp\ad_emails.csv" -Encoding UTF8 -NoTypeInformation

Тестовый запуск (без изменений):

# Добавляем -WhatIf для проверки
Set-ADUser -Identity ivanov -Replace @{mail="test@domain.ru"} -WhatIf

Частые ошибки и решения

Проблема Решение
Set-ADUser : The term is not recognized Установите модуль: Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Атрибут не обновляется Убедитесь, что используете -Replace, а не прямое присваивание. Некоторые атрибуты требуют именно хэш-таблицу
Изменения не видны в Exchange Атрибут mail в AD не синхронизируется автоматически с PrimarySMTPAddress. Для Exchange используйте Enable-MailUser или консоль Exchange
Ошибка доступа Убедитесь, что у вашей учётной записи есть права на запись в атрибут mail (делегирование через Delegation of Control)

Безопасность и рекомендации

1. Сделайте бэкап перед массовыми изменениями:
   Get-ADUser -Filter * -Properties mail | Export-Clixml "C:\backup\ad_users_backup.xml"
  1. Тестируйте на 1–2 пользователях перед запуском на всех.
  2. Используйте -WhatIf и -Confirm для безопасного выполнения.
4. Логируйте изменения:
   Start-Transcript -Path "C:\logs\ad_email_update_$(Get-Date -Format 'yyyyMMdd').log"
   # ... ваш скрипт ...
   Stop-Transcript

Совет:

Если вы работаете в гибридной среде (AD + Office 365), изменения в атрибуте mail могут быть перезаписаны Azure AD Connect. В этом случае редактируйте почту в облаке или настройте правило синхронизации.