Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Помогите создать батник для переноса Профиля пользователя. (http://forum.oszone.net/showthread.php?t=164126)

katarsis 20-01-2010 17:25 1325262

Помогите создать батник для переноса Профиля пользователя.
 
Доброго времени суток!
Хотелось бы узнать возможноли создать батник чтоб он переносил профиль из Documents And Setings на другой диск, если да то как?

Vadikan 21-01-2010 01:57 1325626

katarsis, а как бы вы вручную делали? :) Это надо делать во время установки с помощью файла ответов (ссылки в подписи). А после установки - не рекомендуется во избежание проблем...

skyfish 21-01-2010 03:03 1325657

Написать можно, но там много будет возни с регистром. Лучше перенесите с помощью готовой утилиты.
Предварительно сделайте бекап диска || регистра.

amel27 21-01-2010 11:26 1325877

Цитата:

Цитата katarsis
переносил профиль из Documents And Setings на другой диск »

противоречивая постановка вопроса: перенос ВСЕХ профилей ("C:\Documents And Setings", т.е. о чем сказал Vadikan, ) на другой диск или одного пользователя "из Documents And Setings"? Последнее называется перемещаемым профилем: Как создать и скопировать перемещаемый профиль пользователя в Windows

semiono 21-01-2010 20:00 1326323

По своему опыту знаю, сначала должны быть (существовать) папки, и только после этого правка реестра!
Если это не учитывать возможен "откат"!
Ну а переносить не сложно...
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-73586283-1482476501-682003330-500]
ProfileImagePath=...
Думаю ID будет другим у каждого юзера, но зато этого достаточно.

Остальное тоже здесь рядом если надо ~
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
ProfilesDirectory= (это у вас Documents And Setings)
AllUsersProfile= это тоже понятно.

Папки копировать надо из другой системы, потому что NTUSER.DAT нельзя скопировать,
хотя может кто и знает способ.

Я многократно менял все профили и Common Files, проблем не было!
Для PF/CF подойдёт find and replace, например, jv16 power tools очень корректно делает,
в пути не забудте слеш использовать \Program Files, чтоб не заменить то, что к пути не имеет отношения. :)

Ещё есть [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
но это не столь серьёзный раздел, хотя и должен быть корректно записан, чтоб "проводник" не падал :)

katarsis 21-01-2010 22:50 1326441

Цитата:

Цитата Vadikan
katarsis, а как бы вы вручную делали? Это надо делать во время установки с помощью файла ответов (ссылки в подписи). А после установки - не рекомендуется во избежание проблем... »

Цитата:

Цитата semiono
Папки копировать надо из другой системы, потому что NTUSER.DAT нельзя скопировать,
хотя может кто и знает способ. »

делаю очень просто захожу в безопасный режим под админом правой кнопкой на Мой компьютер - Свойства - Дополнительно - Профили пользователей Параметры - Выбираю Пользователя , жму копировать выбираю дирикторию... потом правлю реестра как описано выше...
Я так постояно делаю.Но хотелось бы batник...
Может кто нибуть подскажит, хотя бы где найти инфу, может кто нибуть замарачивался так?

Vadikan 22-01-2010 02:23 1326595

Цитата:

Цитата katarsis
делаю очень просто захожу в безопасный режим под админом правой кнопкой на Мой компьютер - Свойства - Дополнительно - Профили пользователей Параметры - Выбираю Пользователя , жму копировать »

ОС указывать надо сразу тогда...
Цитата:

Цитата katarsis
потом правлю реестра как описано выше... »

Вот это и не поддерживается, например.

Я смотрю так на проблему: если нужен батник, значит, процедура выполняется регулярно. Тогда нужно просто сразу делать правильно - при установке. Впрочем, не буду мешать поискам батника.

amel27 25-01-2010 06:00 1329081

Цитата:

Цитата katarsis
делаю очень просто захожу в безопасный режим под админом правой кнопкой на Мой компьютер - Свойства - Дополнительно - Профили пользователей Параметры - Выбираю Пользователя , жму копировать выбираю дирикторию... потом правлю реестра как описано выше...
Я так постояно делаю.Но хотелось бы batник... »

копирование профиля (пользователь должен быть разлогинен):
CopyProfile command-line tool to copy a Windows user profile on a Windows XP-based or a Windows Server 2003-based computer

реестр править можно через тот же REG.EXE

volk1234 14-04-2010 02:41 1392033

Привет всем.
Я тут заканчиваю писать статью по использованию SubinACL и в качестве примера привожу миграцию профиля локального пользователя в домен. Прошу посмотреть гуру, дабы я не позорился неработающим примером. Заодно узнаю как мне получить путь к профилям из реестра целиком :)
Предполагается, что скрипт будет запускаться от имени администратора домена. Формат запуска
mig2dom.cmd oldusername newusername userfilesdisk

Код:

@Echo off
Set OLD_USER=%1
Set NEW_USER=%2
Set USER_DISK=%3
Rem Извлекаем из реестра полный путь к папке, содержащей профили пользователей  - чегото у меня  с пробелами неполучается.....
For /F "Skip=1 Tokens=3* " %%i In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /V ProfilesDirectory') Do Set profiles=%%i

Echo %profiles%

Rem Копируем файлы профиля
Xcopy "%profiles%\%OLD_USER%\*.*" "%profiles%\%NEW_USER%" /E /Q /H /R /K /Y

Rem Делаем нового пользователя владельцем
Subinacl /noverbose /subdirec "%profiles%\%NEW_USER%\*" /setowner="%NEW_USER%"

Rem Загружаем куст реестра и изменяем разрешения
Reg Load HKEY_USERS\Temph "%profiles%\%NEW_USER%\NTUSER.DAT"
Subinacl /noverbose /regkey "HKEY_USERS\Temph"  /replace=%OLD_USER%=%NEW_USER%
Reg Unload HKEY_USERS\Temph

Rem Дополнительно меняем владельца и разрешения в папке\на диске где хранятся документы пользователя
If %3=="" (
Goto :EOF
) Else (
Subinacl /noverbose /subdirec "%USER_DISK%"\*.* /replace="%OLD_USER%"="%NEW_USER%"
Subinacl /noverbose /subdirec "%USER_DISK%"\*.* /setowner="%NEW_USER%"
)
Pause
Exit


amel27 14-04-2010 05:07 1392043

volk1234, а разве достаточно просто сменить права на реестр?... там ведь могут быть параметры с явным указанием имени/SID пользователя... например, можно вывести через RegFind:
Код:

RegFind -y -p HKEY_CURRENT_USER %USERNAME%
кстати, можно прочитать "profiles" и без реестра: http://forum.oszone.net/post-374160-12.html

volk1234 14-04-2010 10:49 1392160

Цитата:

Цитата amel27
там ведь могут быть параметры с явным указанием имени/SID пользователя »

Хм. Да есть такое - только SID имеется и тот и то в одном месте, а имя старого пользователя во многих настройках программ - как история открытых файлов и т.д.
В любом случае профиль будет работать корректно - за исключением специальных программ. Это момент я обязательно укажу в статье. В любом случае дополнительные утилиты привлекать неохота - пропадает смысл примера.
Если есть предложения как заменить из командной стороки такие строки- рад буду выслушать. Правда возможны глюки в виде замены совпадающих имен пользователя и имени логина в программы - например Administrator для входа в Win изменится, а для входа в БД такое же имя менять нельзя .

amel27 14-04-2010 11:54 1392219

Цитата:

Цитата volk1234
дополнительные утилиты привлекать неохота »

а как же SubInACL ?.. кстати, для NTFS прав она не очень подходит, так как не поддерживает наследование - назначает права индивидуально на каждый объект (файл/папку), мне больше нравится Xcacls.VBS... а если выставить наследование, то и ключ /K в XCOPY не нужен

Цитата:

Цитата volk1234
Если есть предложения как заменить из командной стороки такие строки- рад буду выслушать. »

ключ -r в RegFind

volk1234 17-04-2010 23:17 1395135

Цитата:

Цитата amel27
а как же SubInACL ?.. »

Я в том смысле что у меня статья про subinacl - это основная утилита, а любые другие - дополнительные.

По поводу наследования - абсолютно справедливо, но утилиты вроде icacls xcacls не работают с реестром.

Вобщем сегодня помучил USMT, Мастер переноса файлов и параметров (который, кстати, тоже использует xcopy) и сделал такой скрипт:
Код:

@Echo off

Set OLD_USER=%1
Set NEW_USER=%2
Set USER_DISK=%3

Rem Извлекаем из реестра полный путь к папке, содержащей профили пользователей
SET profiles=%AllUsersProfile%
SET profiles=%profiles:~0,-10%
Echo %profiles%

xcopy "%profiles%\%OLD_USER%\*.*" "%profiles%\%NEW_USER%" /E /Q /H /R /K /Y

subinacl /noverbose /subdirec "%profiles%\%NEW_USER%" /setowner="%NEW_USER%"
subinacl /noverbose /subdirec "%profiles%\%NEW_USER%\*" /setowner="%NEW_USER%"

Reg Load HKEY_USERS\Temph "%profiles%"\%NEW_USER%\NTUSER.DAT
subinacl /noverbose /subkeyreg HKEY_USERS\Temph  /replace=%OLD_USER%=%NEW_USER%
subinacl /noverbose /subkeyreg HKEY_USERS\Temph\*  /replace=%OLD_USER%=%NEW_USER%
Reg Unload HKEY_USERS\Temph

If  "%USER_DISK%"=="" Goto :EOF

subinacl /noverbose /subdirec "%USER_DISK%" /replace="%OLD_USER%"="%NEW_USER%"
subinacl /noverbose /subdirec "%USER_DISK%"\*.* /replace="%OLD_USER%"="%NEW_USER%"
subinacl /noverbose /subdirec "%USER_DISK%"\*.* /setowner="%NEW_USER%"
subinacl /noverbose /subdirec "%USER_DISK%" /setowner="%NEW_USER%"
Pause

Exit

Перенеслось все - ярлычки на своих местах, программы открываются. Ничуть не хуже других средств переноса. Например Autocad все равно ни одно средство под ХР корректно не перенесет. У меня просто еще раз запустилась настройка Autocad профиля и все заработало.

Засада кроется в другом - например при установке пользователя обозвали Slava. Соответственно на папку Slava ссылается ProfileList. Если переименовать пользователя в Lena - имя папки с профилем не изменяется ! Соответственно моя переменная OLD_USER работает не правильно - ибо папку копировать надо Slava - откуда это моему скрипту знать, а разрешения менять у Lena....

amel27 18-04-2010 14:23 1395515

Цитата:

Цитата volk1234
откуда это моему скрипту знать »

как вариант - восстановить SID пользователей - через WMI или другие CMD-утилиты (тут уже вопрос поднимался неоднократно), после чего соответствие между пользователем и профилем однозначно устанавливается через "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"


Время: 02:39.

Время: 02:39.
© OSzone.net 2001-