Перейти к содержимому

Как перенести активных пользователей из одной коллекции в другую windows rds

Задача перенести активных пользователей из одной коллекции rds в другую. Надо запросить у коллекции список пользователей и добавить в группу новой коллекции из старой удалить.

# Import required modules
Import-Module ActiveDirectory
Import-Module RemoteDesktop

# Define RDS collection and groups
$collectionName = "Rec"
$sourceGroup = "G-Rec"
$destinationGroup = "G-Rec-fslogix"
$userLimit = 1 # Количество пользователей для переноса

# Get active users from RDS collection
try {
    Write-Host "Getting active users from RDS collection '$collectionName'..."
    $activeSessions = Get-RDUserSession -CollectionName $collectionName -ConnectionBroker MSK-HWRDCB02.voxys.ru
    
    if (-not $activeSessions) {
        Write-Host "No active sessions found in collection."
        exit
    }
    
    $activeUsers = $activeSessions | Select-Object -ExpandProperty UserName -Unique | Select-Object -First $userLimit
    Write-Host "Found $($activeUsers.Count) active users (limited to $userLimit):"
    $activeUsers | ForEach-Object { Write-Host "- $_" }
    
} catch {
    Write-Error "Failed to get RDS sessions: $_"
    exit
}

# Process users in AD groups
try {
    # Get AD users from source group (only those who are active and limit to $userLimit)
    $sourceMembers = Get-ADGroupMember -Identity $sourceGroup | Where-Object {
        $_.objectClass -eq 'user' -and $activeUsers -contains $_.SamAccountName
    } | Select-Object -First $userLimit
    
    if (-not $sourceMembers) {
        Write-Host "No matching active users found in source group."
        exit
    }
    
    Write-Host "Processing $($sourceMembers.Count) active users from source group..."
    
    # Display users to be moved
    Write-Host "Users to be moved:"
    $sourceMembers | ForEach-Object { Write-Host "- $($_.SamAccountName)" }
    
    # Add users to destination group
    Add-ADGroupMember -Identity $destinationGroup -Members $sourceMembers -ErrorAction Stop
    Write-Host "Successfully added users to destination group $destinationGroup"
    
    # Remove users from source group
    Remove-ADGroupMember -Identity $sourceGroup -Members $sourceMembers -Confirm:$false -ErrorAction Stop
    Write-Host "Successfully removed users from source group $sourceGroup"
    
    # Verification
    Write-Host "`nVerification:"
    
    # Check destination group
    $destMembers = Get-ADGroupMember -Identity $destinationGroup | Select-Object -ExpandProperty SamAccountName
    $movedUsers = $sourceMembers | Select-Object -ExpandProperty SamAccountName
    
    $verifiedCount = 0
    foreach ($user in $movedUsers) {
        if ($destMembers -contains $user) {
            $verifiedCount++
        } else {
            Write-Warning "$user not found in destination group"
        }
    }
    
    Write-Host "$verifiedCount users verified in destination group"
    
    # Check source group
    $remainingUsers = Get-ADGroupMember -Identity $sourceGroup | Select-Object -ExpandProperty SamAccountName
    $remainingCount = 0
    
    foreach ($user in $movedUsers) {
        if ($remainingUsers -contains $user) {
            Write-Warning "$user still exists in source group"
            $remainingCount++
        }
    }
    
    if ($remainingCount -eq 0) {
        Write-Host "All users successfully removed from source group"
    } else {
        Write-Warning "$remainingCount users still remain in source group"
    }
    
} catch {
    Write-Error "An error occurred: $_"
    Write-Host "Error details:"
    $_.Exception.Message
    $_.ScriptStackTrace
}

 

Similar Posts:

Добавить комментарий

Яндекс.Метрика