Перенос терминального сервера: создание пользователей и профилей через CSV и PowerShell

При переносе терминального сервера в другой дата-центр часто возникает типовая задача:
необходимо заново создать пользователей, сформировать их профили и перенести пользовательские данные.

Один из самых простых способов автоматизировать этот процесс — использовать CSV-файл и PowerShell.

1. Подготовка CSV-файла с пользователями

Сначала создадим файл со списком пользователей и паролей.

Пример содержимого файла:

username,password
user1,pass1
user2,pass2
user3,pass3

Сохраняем его под именем users.csv в каталог C:\temp.

2. Создание локальных пользователей через PowerShell

Запускаем PowerShell с правами администратора и выполняем следующий скрипт:


$csvPath = "C:\temp\users.csv"
$users = Import-Csv $csvPath

foreach ($u in $users) {
    $username = $u.Username
    $password = ConvertTo-SecureString $u.Password -AsPlainText -Force
    $fullname = $u.FullName

    if (-not (Get-LocalUser -Name $username -ErrorAction SilentlyContinue)) {

        New-LocalUser `
            -Name $username `
            -Password $password `
            -FullName $fullname `
            -Description "Created from CSV" `
            -PasswordNeverExpires

        Write-Host "Создан пользователь: $username"
    }
    else {
        Write-Host "Пользователь уже существует: $username"
    }
}

3. Создание пользовательских профилей

После создания учетных записей необходимо сформировать профили пользователей.
На терминальном сервере профиль создаётся при первом входе пользователя в систему.

Чтобы автоматизировать этот процесс, можно выполнить вход по RDP под каждой учетной записью.

4. Автоматический вход по RDP для создания профилей

С другого компьютера запускаем следующий скрипт (предварительно скопировав туда файл
users.csv и указав IP-адрес сервера):


$server = "192.168.1.10"
$users = Import-Csv "C:\scripts\users.csv"

foreach ($u in $users) {

    $username = $u.username
    $password = $u.password

    cmdkey /generic:TERMSRV/$server /user:$username /pass:$password

    Start-Process "mstsc.exe" -ArgumentList "/v:$server"

    Start-Sleep -Seconds 5
}

В результате скрипт будет подключаться к серверу и создавать профили пользователей.

5. Копирование данных пользователей

Скопируем только необходимые пользовательские данные (без полного профиля):

  • Desktop (Рабочий стол)
  • Documents (Документы)
  • Downloads (Загрузки)

Это безопаснее: меньше мусора и нет проблем с SID.
Запускаем скрипт на старом сервере. У нового сервера должен быть доступ к сетевой папке temp.


$source = "C:\Users"
$dest = "\\192.168.1.10\temp"

$exclude = @(
    "Public",
    "Default",
    "Default User",
    "All Users",
    "Administrator"
)

Get-ChildItem $source -Directory | Where-Object {
    $exclude -notcontains $_.Name
} | ForEach-Object {

    $user = $_.Name

    robocopy "$source\$user\Desktop" "$dest\$user\Desktop" /E /COPY:DAT /R:1 /W:1
    robocopy "$source\$user\Documents" "$dest\$user\Documents" /E /COPY:DAT /R:1 /W:1
    robocopy "$source\$user\Downloads" "$dest\$user\Downloads" /E /COPY:DAT /R:1 /W:1
}

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

Профиль должен существовать

Перед копированием пользователь должен хотя бы один раз зайти в систему,
чтобы создалась папка C:\Users\username.

Поэтому данные копируются во временную папку temp, а затем переносятся в профиль.

Локализация папок

На русской системе папки могут отображаться как «Рабочий стол», «Документы», «Загрузки»,
но их реальные имена в файловой системе обычно остаются:
Desktop, Documents, Downloads.

Перенос терминального сервера: создание пользователей и профилей через CSV и PowerShell

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *