# Импорт модуля ActiveDirectory (требуется для работы с AD)
Import-Module ActiveDirectory
# Путь к CSV‑файлу
$csvPath = "C:\path\to\your\file.csv"
# Чтение CSV‑файла
$users = Import-Csv -Path $csvPath
# Массив для логирования результатов
$log = @()
foreach ($user in $users) {
$displayName = $user.DisplayName
$userName = $user.UserName
# Извлечение последнего слова из DisplayName (предполагается, что это отчество)
$words = $displayName -split '\s+' | Where-Object { $_ -ne '' } # Разбиваем на слова и убираем пустые элементы
if ($words.Count -ge 3) {
$patronymic = $words[-1] # Последнее слово — отчество
} else {
Write-Warning "Недостаточно слов в DisplayName для пользователя $userName (DisplayName: $displayName). Ожидалось минимум 3 слова (ФИО)."
$log += [PSCustomObject]@{
UserName = $userName
DisplayName = $displayName
Status = "Failed - Insufficient words in DisplayName (expected at least 3: Surname Name Patronymic)"
}
continue
}
try {
# Поиск пользователя в AD по UserName (SamAccountName)
$adUser = Get-ADUser -Identity $userName -ErrorAction Stop
# Обновление атрибута middleName
Set-ADUser -Identity $adUser.SamAccountName -MiddleName $patronymic
Write-Host "Успешно обновлено отчество для $userName: $patronymic" -ForegroundColor Green
$log += [PSCustomObject]@{
UserName = $userName
DisplayName = $displayName
Patronymic = $patronymic
Status = "Success"
}
} catch {
Write-Error "Ошибка при обработке пользователя $userName: $($_.Exception.Message)"
$log += [PSCustomObject]@{
UserName = $userName
DisplayName = $displayName
Status = "Error - $($_.Exception.Message)"
}
}
}
# Сохранение лога в CSV
$log | Export-Csv -Path "C:\path\to\log.csv" -NoTypeInformation -Encoding UTF8
Write-Host "Обработка завершена. Лог сохранён в C:\path\to\log.csv" -ForegroundColor Cyan