Может кому пригодится , сценарий PowerShell
spoiler# Параметры
$SourceServer = "SourceServerName" # Имя исходного сервера
$TargetServer = "TargetServerName" # Имя целевого сервера
$UserProfilesPath = "C:\Users" # Путь к пользовательским профилям
$TempFolder = "C:\Temp\UserTransfer" # Временная папка для сборки данных
$ZipFile = "C:\Temp\UserTransfer.zip" # Путь к ZIP-архиву
# Список папок, которые нужно исключить из копирования
$ExcludedFolders = @("AppData\Local\Temp", "AppData\Local\Microsoft\Windows\Temporary Internet Files", "AppData\Local\Microsoft\Edge", "Downloads")
# Очистка временной папки
Remove-Item -Path $TempFolder -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Path $TempFolder -Force
# Получение списка пользователей RDP
$RdpUsers = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" | Where-Object {
$_.SID -like "S-1-5-21*" -and $_.Name -ne "Administrator" -and $_.Disabled -eq $false
}
# Экспорт данных всех пользователей
foreach ($User in $RdpUsers) {
$UserName = $User.Name
Write-Host "Экспорт данных пользователя: $UserName"
# Копирование профиля пользователя
$ProfilePath = Join-Path -Path $UserProfilesPath -ChildPath $UserName
if (Test-Path $ProfilePath) {
$DestinationPath = Join-Path -Path $TempFolder -ChildPath $UserName
Write-Host "Копирование профиля $UserName в $DestinationPath..."
Get-ChildItem -Path $ProfilePath -Recurse -Force | Where-Object {
$ExcludedFolders -notcontains $_.FullName.Replace($ProfilePath + "\", "")
} | ForEach-Object {
$RelativePath = $_.FullName.Substring($ProfilePath.Length).TrimStart("\")
$TargetPath = Join-Path -Path $DestinationPath -ChildPath $RelativePath
if ($_.PSIsContainer) {
New-Item -ItemType Directory -Path $TargetPath -Force | Out-Null
} else {
Copy-Item -Path $_.FullName -Destination $TargetPath -Force
}
}
}
# Экспорт настроек пользователя (пример для RDP)
$UserRegistryHive = "HKCU:\Software\Microsoft\Terminal Server Client\Default"
$RegExportPath = Join-Path -Path $TempFolder -ChildPath "${UserName}_RDPSettings.reg"
reg export $UserRegistryHive $RegExportPath /y
}
# Упаковка всех данных в ZIP-архив
Write-Host "Упаковка всех данных в ZIP-архив: $ZipFile"
Compress-Archive -Path "$TempFolder\*" -DestinationPath $ZipFile -Force
# Передача ZIP-архива на целевой сервер
Write-Host "Передача ZIP-архива на целевой сервер..."
Copy-Item -Path $ZipFile -Destination "\\$TargetServer\C$\Temp\UserTransfer.zip" -Force
# Распаковка данных на целевом сервере
Invoke-Command -ComputerName $TargetServer -ScriptBlock {
param($ZipFile, $ExtractPath, $UserProfilesPath)
Write-Host "Распаковка данных на целевом сервере..."
Expand-Archive -Path $ZipFile -DestinationPath $ExtractPath -Force
# Импорт пользователей и их данных
$UserProfiles = Get-ChildItem -Path $ExtractPath -Directory
foreach ($Profile in $UserProfiles) {
$UserName = $Profile.Name
# Создание учетной записи пользователя
Write-Host "Создание учетной записи: $UserName"
New-LocalUser -Name $UserName -Password (ConvertTo-SecureString "TemporaryPassword123!" -AsPlainText -Force) -Description "Imported RDP User"
# Восстановление профиля
$SourceProfilePath = Join-Path -Path $ExtractPath -ChildPath $UserName
$TargetProfilePath = Join-Path -Path $UserProfilesPath -ChildPath $UserName
Copy-Item -Path $SourceProfilePath -Destination $TargetProfilePath -Recurse -Force
# Импорт настроек (пример для RDP)
$RegImportPath = Join-Path -Path $ExtractPath -ChildPath "${UserName}_RDPSettings.reg"
reg import $RegImportPath
}
} -ArgumentList "C:\Temp\UserTransfer.zip", "C:\Temp\Extracted", "C:\Users"
# Очистка временных данных
Write-Host "Очистка временных данных..."
Remove-Item -Path $TempFolder, $ZipFile -Recurse -Force
Write-Host "Перенос завершен!"
Убедитесь, что временная папка (C:\Temp) существует и доступна для записи на обоих серверах.
Скрипт требует административных привилегий.
Проверьте наличие Compress-Archive и Expand-Archive на обоих серверах.