Добавить в корзинуПозвонить
Найти в Дзене
Сисадмин

Мигрируем профили пользователей в Windows. Какой подход лучше?

Миграция профилей с терминального сервера — это как вытаскивать зуб мудрости у Windows: больно, страшно и обязательно с криком «а чё, нельзя было просто скопировать папку?!» И даже иногда без боли, если знаешь, куда тыкать и где не облажаться. Ниже — проверенные способы, без ереси и шаманства, только мясо прокручивай, как говорится. Мы говорим про профили пользователей на терминальном сервере (RDS, Remote Desktop Services).
А значит, нам нужно утащить: 🛠 Это не реклама, а признание в любви. Если хочешь мигрировать без кровавых жертв — используй User Profile Wizard. Он автоматически: После этого: юзер заходит — и у него всё, как на старом сервере. Если хочешь побольше собрать опыта, как админ-аскет на горе — welcome to manual mode. takeown /f C:\Users\newuser /r /d y
icacls C:\Users\newuser /setowner "DOMAIN\newuser" /t
icacls C:\Users\newuser /grant "DOMAIN\newuser:(OI)(CI)F" /t Перезагрузи и молись богу SID Если хочешь мигрировать и дальше жить без боли — используй roaming profiles,
Оглавление
Миграция профилей с RDS
Миграция профилей с RDS

Миграция профилей с терминального сервера — это как вытаскивать зуб мудрости у Windows: больно, страшно и обязательно с криком «а чё, нельзя было просто скопировать папку?!»

И даже иногда без боли, если знаешь, куда тыкать и где не облажаться. Ниже — проверенные способы, без ереси и шаманства, только мясо прокручивай, как говорится.

Что мы вообще мигрируем?

Мы говорим про профили пользователей на терминальном сервере (RDS, Remote Desktop Services).

А значит, нам нужно утащить:

  • %USERPROFILE% (вся папка профиля)
  • Скрытые файлы вроде NTUSER.DAT (чтобы были настройки, а не свежая голая оболочка)
  • AppData (и local, и roaming)
  • Ну и не профакапить права, потому что потом юзер не сможет даже обои поменять

Способ №1: User Profile Wizard (Forensit)

🛠 Это не реклама, а признание в любви. Если хочешь мигрировать без кровавых жертв — используй User Profile Wizard.

Как это работает:

  1. Качаем User Profile Wizard с сайта ForensIT (бесплатная версия хватает на всё)
  2. Запускаем на новом сервере, где юзер уже логинился хотя бы раз
  3. Указываем, откуда мигрировать профиль (C:\Users\OldProfile)
  4. Присваиваем его новому пользователю (например, DOMAIN\newuser)

Он автоматически:

  • переносит профиль
  • переименовывает SID
  • прописывает в реестре
  • даёт права
    и
  • ОЧЕНЬ РЕДКО КОГДА ЧТО_ТО ЛОМАЕТ

После этого: юзер заходит — и у него всё, как на старом сервере.

Почему круто:

  • Без ручного реестра
  • Без битых ссылок
  • Без ломки прав
  • Работает быстро и красиво
  • Профиль не становится "TEMP"

Способ №2: Ручками через одно место, но работает

Если хочешь побольше собрать опыта, как админ-аскет на горе — welcome to manual mode.

Что делать:

  1. На старом сервере:
    Заходим под админом
    Копируем папку C:\Users\USERNAME куда-нибудь (D:\migrated_profiles)
    ОБЯЗАТЕЛЬНО включая
    скрытые и системные файлы
    Не забудь NTUSER.DAT, AppData, и всякие .vscode, .ssh, Downloads, даже если они тебе кажутся мусором
  2. На новом сервере:
    Создай нового юзера (или залогинься под ним, чтобы создался профиль)
    Перезагрузи, чтобы профиль не висел в сессии
    Удали его папку профиля (C:\Users\newuser)
    Вставь на это место скопированный профиль, ПЕРЕИМЕНОВАННЫЙ как newuser
    Присвой владельца:
takeown /f C:\Users\newuser /r /d y
icacls C:\Users\newuser /setowner "DOMAIN\newuser" /t
icacls C:\Users\newuser /grant "DOMAIN\newuser:(OI)(CI)F" /t

Перезагрузи и молись богу SID

Где можно облажаться?

  • Забыл NTUSER.DAT → все настройки профиля = в мусор
  • Оставил старый SID → профиль работает, но ты не можешь ничего редактировать, а Event Viewer орёт как бешеный хорёк
  • Профиль стал TEMP → здравствуй, session hell, пока юзер орёт: “Где мои ярлыки, Петрович?!”

Способ №3: Роуминг через Group Policy + File Server

Если хочешь мигрировать и дальше жить без боли — используй roaming profiles, которые хранятся на сетевом диске и сами ездят с пользователем.

Как это выглядит:

  1. Настраиваешь GPO:
    User Configuration → Policies → Administrative Templates → System → User Profiles
    → Set roaming profile path to: \\filesrv\Profiles\%USERNAME%
  2. Копируешь туда старый профиль (один раз руками или автоматом)
  3. Юзер заходит на любой терминальный сервер, и его профиль скачивается сам

Но! Это требует немного мозга, и отдельного места под хранение. Но зато больше никогда не будешь вручную переносить ярлыки и файлы Excel.

Что выбрать?

User Profile Wizard — когда ты любишь себя

Ручками через боль — когда ты мазохист или в офлайне тебе стало совсем скучно
Roaming profiles — когда ты хочешь автоматизацию как у SkyNet

А если профили ранее уже были скопированы твоим напарником, который забухал и теперь надо лишь актуализировать данные?

Ну, брат, тогда добро пожаловать в мир дифференциальной синхронизации, где царит порядок, скорость и никакой боли от NTUSER.DAT!

Цель

Ты уже один раз скопировал папки профилей, теперь хочешь:

  • Не затирать то, что уже есть (чтобы не порушить, если кто-то уже там поработал)
  • Притащить только новые/изменённые файлы
  • Не схлопотать «TEMP» при входе
  • Сделать это быстро и по-людски

Решения на выбор

1. robocopy – король синхронизации без церемоний

Windows-админы знают: если тебе нужно "сделать как надо" — robocopy выезжает на бронетехнике и делает дело.

robocopy "\\old-ts\Users\USERNAME" "C:\Users\USERNAME" /MIR /Z /XA:SH /R:2 /W:2 /COPYALL /XJ /NFL /NDL /LOG:C:\sync.log

Пояснение флагов:

  • /MIR – зеркало: копирует новые и удаляет старые (⚠️ осторожно!)
  • /Z – копирует в перезапускаемом режиме
  • /XA:SH – исключает скрытые и системные файлы (если нужно)
  • /COPYALL – сохраняет права, владельцев, метки времени
  • /XJ – исключает символические ссылки (во избежание петли ада)
  • /NFL /NDL – не выводит список файлов и директорий (чтобы лог был чище)
  • /LOG – сохраняет лог (для паранойи)

Если ты НЕ хочешь удалять файлы, используй /E /PURGE вместо /MIR — будет мягче.

2. SyncToy или FreeFileSync – если ты хочешь GUI и графоний

Да, Microsoft когда-то сделала тулзу SyncToy. Да, она древняя. Да, она всё ещё работает.

FreeFileSync — то же самое, но в XXI веке.

Как это делается:

  • Ставишь
  • Указываешь source и destination
  • Выбираешь режим "Update"
  • Прогоняешь анализ — и только потом жмёшь "Sync"

Подходит, если ты хочешь визуально убедиться, что не гробишь профили юзеров (я надеюсь у тебя все-таки есть бэкап, ведь да? а то всяко бывает, особенно с VIPами).

3. PowerShell + Get-ChildItem + Copy-Item — если ты хочешь скриптовать красиво

Вот пример скрипта:

$source = "\\old-ts\Users\USERNAME"
$dest = "C:\Users\USERNAME"

$files = Get-ChildItem -Path $source -Recurse -Force

foreach ($file in $files) {
$target = $file.FullName.Replace($source, $dest)
if (!(Test-Path $target) -or ($file.LastWriteTime -gt (Get-Item $target).LastWriteTime)) {
Copy-Item $file.FullName $target -Force
}
}

💡 Он тащит только изменённые или отсутствующие файлы.

А что с NTUSER.DAT?

  • НЕ ТРОГАЙ, если профиль уже используется на новом сервере.
  • Это ядро пользовательских настроек. Если заменишь — будет хардкорный откат в прошлое.
  • Если прям нужно его обновить — делай это только когда профиль НЕ в сессии.

🧨 Можешь использовать утилиту reg load / reg unload, чтобы смонтировать NTUSER.DAT и сравнить что внутри — но это уже путь ситха и не для ДЗЕНа.

А Вот уровень сисадмина с черным поясом:

Если пользователей много — автоматизируй через PowerShell:

$users = Get-ChildItem "\\old-ts\Users" | Where-Object { $_.PSIsContainer }
foreach ($user in $users) {
robocopy "\\old-ts\Users\$($user.Name)" "C:\Users\$($user.Name)" /E /Z /COPYALL /R:2 /W:2 /XJ /LOG+:C:\sync_all.log
}

Важный момент:

  • Перед миграцией убей сессии пользователей, чтобы профили не были в использовании (или работай через профильные папки D:\Users)
  • Всегда делай бэкап — хотя бы скриптом zip.exe в черную дыру
  • Не обновляй то, что уже хорошо работает, без причины — закон админа №1

Финалочка

Миграция профилей — это как пересадка души:

Если делаешь неаккуратно — юзер проснётся в новом теле и закричит: “Где мои закладки в Chrome?!”

А так — всё сработает, если ты не психанёшь и не замажешь NTUSER.DAT на живом профиле.