Задача перенести активных пользователей из одной коллекции 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:
- Как перенести пользователей из одной группы в другую через powershell
- Как удалить у пользователя все группы кроме domain user
- Как вывести пользователей которые состоят в административных группах domain admin, enterprise admin, schema admin
- Как исправить ошибку Database is mandatory on UserMailbox exchange.
- Как вывести список пользователей 1с какую лицензию hasp использует пользователь.