Home Без рубрики Миграция групп безопасности из одного домена в другой включая пользователей Powershell

Миграция групп безопасности из одного домена в другой включая пользователей Powershell

by admin

Выгрузить группы из 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."
        }
    }
}

You may also like

Leave a Comment