Любой способ автоматического восстановления профилей пользователей

У нас был сервер Windows 2012 R2 на хостинге VPS с установленными службами терминалов и около 40 активных пользователей. Недавно мы столкнулись с сбоем системы без какой-либо возможности восстановления, поэтому нам удалось сделать резервную копию всех пользовательских данных и мы решили переустановить систему.

Есть ли какой-нибудь автоматический способ получения пользовательских данных и создания профилей пользователей, чтобы не делать это вручную? Какой-то сценарий WSH, инструмент миграции, что угодно. Скажем, прочтите содержимое каталога, создайте пользователя для каждого профиля с паролем по умолчанию, а затем скопируйте все их окружения рабочего стола, настройки, документы и т. Д.

Я не очень хорошо знаком с администрированием Windows, спасибо за понимание.

Если возможно, я был бы признателен за некоторый фрагмент кода сценария

-1
задан 16 September 2016 в 13:09
1 ответ

Решена для меня. Извините за не очень хорошо прокомментированный скрипт, надеюсь, помощь кому-нибудь

Создаёт пользователей в соответствии с резервными копиями пользовательских каталогов (обрабатываются исключения типа Default User, Administrator и т.д.), создает для них домашние каталоги, переносит резервные копии пользовательских каталогов.

Const WAIT_ON_RETURN = True
Const HIDE_WINDOW = 0
Const USER_ROOT_UNC = "C:\Users" 'Set Home Folder Location Here
On Error Resume Next

Function CreateUser(strUser, strPass)

    Set objShell = CreateObject("Wscript.Shell")
    Set objEnv = objShell.Environment("Process")
    strComputer = objEnv("COMPUTERNAME")

    Set colAccounts = GetObject("WinNT://" & strComputer & ",computer")

    Set objUser = colAccounts.Create("user", strUser)
    objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE
    objUser.Put "userFlags", objPasswordNoChangeFlag 
    objUser.SetInfo

End Function

Function CreateCatalog(strUser)
    Dim WshShell, WshNetwork, objFS, objServer, objShare

    Set WshShell = Wscript.CreateObject("Wscript.Shell")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set objFS = CreateObject("Scripting.FileSystemObject")
    Call objFS.CreateFolder(USER_ROOT_UNC & "\" & strUser)
    Call WshShell.Run("cacls " & USER_ROOT_UNC & "\" & strUser & " /e /g Administrators:F", HIDE_WINDOW, WAIT_ON_RETURN)
    Call WshShell.Run("cacls " & USER_ROOT_UNC & "\" & strUser & " /e /g " & strUser & ":C", HIDE_WINDOW, WAIT_ON_RETURN)
End Function

Function CopyDirs(userName)
    arrCopyDirs = Array("Desktop", "Documents", "Downloads", "Links", "Pictures", "Videos", "Music")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    For Each dirName in arrCopyDirs
        currentDirectory = objFSO.GetAbsolutePathName(".")
        copiedDirectory = currentDirectory & "\" & userName & "\" & dirName
        destDirectory = USER_ROOT_UNC & "\" & userName & "\" & dirName
        objFSO.CopyFolder copiedDirectory, destDirectory
    Next
End Function

Function EnumerateCatalog()
    Dim objFSO, objFolder
    Dim arrNotUsers, arrCopyDirs
    arrNotUsers = Array("Default User","MediaAdmin$","Administrator","MSSQL$MICROSOFT##WID","All Users","Plesk Administrator","Default","Public","ServerAdmin$")

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    For Each objFolder In objFSO.GetFolder(".").SubFolders

        If Not Ubound(Filter(arrNotUsers, objFolder.Name)) > -1 Then
            Call CreateUser(objFolder.Name, "12345qweasdzxc")
            Call CreateCatalog(objFolder.Name)
            Call CopyDirs(objFolder.Name)

        End If

    Next
End Function

Call EnumerateCatalog()
0
ответ дан 5 December 2019 в 20:27

Теги

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