113
Выгрузить группы из eua
# Задаем переменную с DN OU
$ouDN = "OU=Moscow-CTD,OU=RU,OU=Europe,OU=BV,DC=eua,DC=bvcorp,DC=corp"
# Получаем все группы в указанном OU
$groups = Get-ADGroup -Filter * -SearchBase $ouDN
# Создаем пустой массив для хранения результатов
$groupMembers = @()
# Перебираем каждую группу и получаем ее участников
foreach ($group in $groups) {
# Получаем участников группы
$members = Get-ADGroupMember -Identity $group.DistinguishedName
# Добавляем информацию о группе и ее участниках в массив
foreach ($member in $members) {
# Проверяем, является ли участник пользователем или группой
if ($member.objectClass -eq "user") {
$userSamAccountName = $member.samAccountName # Используем samAccountName для пользователей
} elseif ($member.objectClass -eq "group") {
$userSamAccountName = $member.Name # Используем Name для групп
} else {
$userSamAccountName = $member.objectClass # На случай других типов объектов
}
$groupMembers += [PSCustomObject]@{
GroupName = $group.Name
UserSamAccountName = $userSamAccountName # Переименовали поле
# MemberType не включается
}
}
}
# Выводим список участников в CSV
$csvPath = "C:\temp\Moscow-CTD.csv"
$groupMembers | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
# Выводим сообщение о завершении
Write-Host "Данные успешно экспортированы в $csvPath"
Загрузить группы в CTD
# Подключение к домену CTD
Import-Module ActiveDirectory
# Путь к целевой OU в домене CTD, куда будут созданы группы
$targetOuPath = "OU=Groups,OU=Moscow,OU=RU,OU=BUREAUVERITAS,DC=corp,DC=local"
# Импорт данных из CSV файла
$userData = Import-Csv -Path "C:\Temp\Moscow-CTD1.csv" -Delimiter ","
# Проверка структуры данных из CSV
if (-not $userData[0].PSObject.Properties['GroupName'] -or -not $userData[0].PSObject.Properties['UserSamAccountName']) {
Write-Host "Ошибка: Проверьте, что файл CSV содержит корректные поля GroupName и UserSamAccountName."
return
}
# Уникальные группы для создания
$groups = $userData | Select-Object -Unique GroupName
# Создание групп, если они не существуют
foreach ($group in $groups) {
$groupName = $group.GroupName # Получаем имя группы
# Проверяем, существует ли группа в домене CTD
$existingGroup = Get-ADGroup -Filter "SamAccountName -eq '$groupName'" -ErrorAction SilentlyContinue
if (-not $existingGroup -and -not [string]::IsNullOrEmpty($groupName)) {
try {
# Создаем группу, если она не существует
New-ADGroup -Name $groupName -SamAccountName $groupName -GroupScope Global -Path $targetOuPath
Write-Host "Создана группа: $($groupName)"
} catch {
Write-Host "Ошибка при создании группы $($groupName): $_"
}
} else {
Write-Host "Группа $($groupName) уже существует"
}
}
# Добавление пользователей и групп в целевые группы
foreach ($entry in $userData) {
$name = $entry.UserSamAccountName # Имя пользователя или группы
$groupName = $entry.GroupName # Имя группы
# Проверяем, если это имя не пустое
if (-not [string]::IsNullOrEmpty($name)) {
# Проверяем, существует ли пользователь
$existingUser = Get-ADUser -Filter "SamAccountName -eq '$name'" -ErrorAction SilentlyContinue
# Проверяем, существует ли группа
$existingGroup = Get-ADGroup -Filter "SamAccountName -eq '$name'" -ErrorAction SilentlyContinue
if ($existingUser) {
# Если это пользователь, добавляем его в группу
try {
Add-ADGroupMember -Identity $groupName -Members $existingUser.SamAccountName
Write-Host "Пользователь $($name) добавлен в группу $($groupName)"
} catch {
Write-Host "Ошибка при добавлении пользователя $($name) в группу $($groupName): $_"
}
} elseif ($existingGroup) {
# Если это группа, добавляем ее в группу
try {
Add-ADGroupMember -Identity $groupName -Members $existingGroup.SamAccountName
Write-Host "Группа $($name) добавлена в группу $($groupName)"
} catch {
Write-Host "Ошибка при добавлении группы $($name) в группу $($groupName): $_"
}
} else {
Write-Host "Ни пользователь, ни группа с именем $($name) не найдены в домене CTD."
}
}
}