Задать вопрос
SayZombie
@SayZombie

Как перенести терминальных пользователей с одного сервера на другой?

Подскажите как перенести терминальных пользователей с одного windows server 2012 standart на другой такой же.
домена нет, на сервер просто создаются юзеры и закидываются в группу удаленного рабочего стола.
  • Вопрос задан
  • 3759 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
Если пароли известны, то подготавливаете текстовый файл формата:
TAB
И с помощью простейшего батника, использующего команду net user /add создаете новых пользователей.
Получить список пользователей можно командой:
wmic useraccount get name
Если пароли не известны, то как вариант заводить пользователей по той же схеме, с одинаковым предустановленным паролем. Или подбирать пароли какой-либо утилитой предназначенной для этого.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@24dc
Сисадмин как будто
Может кому пригодится , сценарий 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 на обоих серверах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы