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

    @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 на обоих серверах.
    Ответ написан
    Комментировать
  • Как обойти Kerio Control в локальной сети?

    @24dc
    Сисадмин как будто
    В своём уме вообще? Не обойти вот и весь ответ .
    Ответ написан
    Комментировать