Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт для копирования пользователей.

Ответить
Настройки темы
CMD/BAT - Скрипт для копирования пользователей.

Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


Вот кстати то что получилось в результате. Может кому пригодится.

users_copy.bat
Код: Выделить весь код
@echo off

SetLocal EnableDelayedExpansion
set home=%cd%
set pspath=%home%\PsTools

rd /s /q users
md users
cd /d users

for /f "tokens=1,2,3 delims= " %%A in ('net user') do (
    Set /A count +=1
    call :copy_user %%A
    Set /A count +=1
    call :copy_user %%B
    Set /A count +=1
    call :copy_user %%C
    )





echo Exit

pause

exit


:copy_user
chcp 1251
find /i "%1" %home%\exclusions.txt
if %errorlevel%==1 (
    echo errorlevel=%errorlevel%
    md %1
    call :copy_profile %1
    )
goto :eof




:copy_profile
For /F "Tokens=1" %%i In ('2^>Nul %pspath%\PsGetSid "%1"^|FindStr /BIC:"S-"') Do Set $UserSID=%%i
For /F "Tokens=1,2*" %%i In ('REG Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%$UserSID%"^|FindStr /BIRC:" *ProfileImagePath "') Do Set $UserProfile=%%k
echo user=%1
echo $UserSID=%$UserSID%
echo $UserProfile=%$UserProfile%

for /f "tokens=1,*" %%A in (%home%\settings.txt) do (
	echo %%A | xcopy /E "%$UserProfile%\%%B" "%1\%%B"
	)
goto :eof
в файле лежат исключения из списка пользователей. Туда можно внести пользователей которых не нужно копировать, к примеру Гость, так же там должен быть мусор который туда попадает после обработки команды net user

exclusions.txt
Код: Выделить весь код
-------------------------------------------------------------------------------
Команда
Учетные
выполнена
записи
пользователей
успешно
успешно.
ASPNET
IUSR_SERVER
IWAM_SERVER
SUPPORT_388945a0
test
Гость
в файле settings.txt лежит список файлов который надо скопировать.
f перед строкой если надо скопировать только конкретный файл
d если всю директорию

settings.txt для примера
Код: Выделить весь код
f Application Data\1C\1Cv81\ibases.v8i
d Application Data\Hamachi
Цитата amel27:
mitiya, еще один вариант, exclusions.txt (только имена пользователей) - в OEM, settings.txt (только путь к файлу/папке) - в WIN кодировке:
Код:
Код: Выделить весь код
	@Echo Off
SetLocal EnableDelayedExpansion
Set Home=%cd%
If Exist users RD /S /Q users
MD users
CD users
For /F "Tokens=1,2 Delims= " %%i In ('WMIC UserAccount Get Name^,SID^,Status^|FindStr /IERC:"OK *"') Do Call :CopyUserProfile %%i %%j
Exit
:CopyUserProfile
 FindStr /IXC:"%1" %Home%\exclusions.txt
 If Not ErrorLevel 1 GoTo :EOF
MD %1
 CHCP 1251
 For /F "Tokens=1,2*" %%i In ('REG Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%2"^|FindStr /BIRC:" *ProfileImagePath"') Do Call Set $UserProfile=%%k
 For /F "UseBackQ Tokens=* Delims=" %%A In ("%Home%\settings.txt") Do If Exist "%$UserProfile%\%%A" XCopy /E/H "%$UserProfile%\%%A" "%1\%%A\">Nul
 CHCP 866
GoTo :EOF »
Код: Выделить весь код
 

Отправлено: 21:21, 26-04-2009

 

Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


Думаю как бы скопировать ключи реестра (меня оптьже волнуют пути к базам 1с7) из HKCU копируемых пользователей.
Не могу найти где они лежат.

Отправлено: 04:02, 27-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата mitiya:
как бы скопировать ключи реестра »
типа такого?.. тоже хватает минусов:
- сохраняются ключи целиком, а не отдельные параметры;
- в REG-файлах нужно еще как-то заменить "HKEY_USERS\TEMP" на "HKEY_CURRENT_USER"
Код: Выделить весь код
@Echo Off
Set $Home=%~dp0
Set $Root=.

Set FileIncl=%$Home%FileIncl.txt
Set UserExcl=%$Home%UserExcl.txt
Set HKCUIncl=%$Home%HKCUIncl.txt

PushD %$Root%
If Exist users RD /S /Q users
MD Users
CD Users
For /F "Tokens=1,2" %%i In ('WMIC UserAccount Where LocalAccount^=True Get Name^,SID^,Status^|FindStr /IERC:"OK *"') Do Call :CopyUserProfile %%i %%j
PopD
Exit

:CopyUserProfile
 :: Сверка имени пользователя со списком исключения
 FindStr /IXC:"%1" %UserExcl%
 If Not ErrorLevel 1 GoTo :EOF
 CHCP 1251 >Nul
 :: Получение пути к профилю пользователя
 For /F "Tokens=1,2*" %%i In ('2^>Nul REG Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%2"^|FindStr /BIRC:" *ProfileImagePath"') Do Call Set $UserProfile=%%k
 If "%$UserProfile%"=="" GoTo :EOF
 :: Копирование файлов/каталогов по списку
 For /F "UseBackQ Tokens=* Delims=" %%A In ("%FileIncl%") Do If Exist "%$UserProfile%\%%A" XCopy /E/H/Q "%$UserProfile%\%%A" "%1\Files\%%A\"
 :: Копирование веток реестра по списку
 REG Load HKU\TEMP "%$UserProfile%\NTUSER.DAT" >Nul
 If ErrorLevel 1 GoTo :EOF
 For /F "UseBackQ Delims=" %%i In ("%HKCUIncl%") Do (
    @Echo F|XCopy /Q/R/V "%~dpnx0" "%1\Regis\%%i.reg" >Nul
    If Exist "%1\Regis\%%i.reg" DEL /Q/F "%1\Regis\%%i.reg"
    REG Export "HKU\TEMP\%%i" "%1\Regis\%%i.reg" /Y
 )
 REG Unload HKU\TEMP >Nul
 CHCP 866 >Nul
GoTo :EOF

Отправлено: 08:55, 27-04-2009 | #3


Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


Цитата:
Application Data\1C\1Cv81\ibases.v8i скопировался в Application Data\1C\1Cv81\ibases.v8i\ibases.v8i плюс еще папки суда скопировались из папки 1Cv81.
это по прежнему актуально.
Так же не удается загрузить файл NTUSER.DAT когда пользователь вошел в систему, ну это логично конечно, но мне кажется должен быть способ подключится к его реестру если он вошел все равно.
Можно наверно конечно было бы исполнить команду по экспорту ключей от его имени, но тогда нужно где-то хранить пароли для всех пользователей.

Отправлено: 11:20, 27-04-2009 | #4


Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


Цитата amel27:
- в REG-файлах нужно еще как-то заменить "HKEY_USERS\TEMP" на "HKEY_CURRENT_USER" »
это как раз не проблема, есть такая прога CHGSTR.EXE , она может производить замену текста в файлах.

Кстати я так понял что подключенные-то пользователи как раз появляются в user со своим сидом , так что нужно как-то только проверить подключен ли он сейчас , наверно можно с помощью errorlevel после
Цитата amel27:
REG Load HKU\TEMP "%$UserProfile%\NTUSER.DAT" >Nul »

Отправлено: 11:57, 27-04-2009 | #5


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата mitiya:
это по прежнему актуально »
исправил
Цитата mitiya:
я так понял что подключенные-то пользователи как раз появляются в user со своим сидом , так что нужно как-то только проверить подключен ли он сейчас , наверно можно с помощью errorlevel »
где-то так (пока без замены), исправил ошибки, тестируйте:
Код: Выделить весь код
@Echo Off
Set $Home=%cd%
Set $Root=.

Set FileIncl=%$Home%FileIncl.txt
Set UserExcl=%$Home%UserExcl.txt
Set HKCUIncl=%$Home%HKCUIncl.txt

PushD %$Root%
If Exist users RD /S /Q users
MD Users
CD Users
For /F "Tokens=1,2" %%i In ('WMIC UserAccount Where LocalAccount^=True Get Name^,SID^,Status^|FindStr /IERC:"OK *"') Do Call :CopyUserProfile %%i %%j
PopD
Exit

:CopyUserProfile
:: -------------
:: %1 - User Name
:: %2 - User SID
:: -------------
 CHCP 1251 >Nul
:: Сверка имени со списком исключения
 FindStr /IXC:"%~1" %UserExcl%
 If Not ErrorLevel 1 GoTo :EOF
:: Получение пути к профилю пользователя
 Set $UserProfile=
 For /F "Tokens=1,2*" %%i In ('2^>Nul REG Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%~2"^|FindStr /BIRC:" *ProfileImagePath"') Do Call Set $UserProfile=%%k
 If "%$UserProfile%"=="" GoTo :EOF
:: Копирование файлов/каталогов по списку
 For /F "UseBackQ Tokens=* Delims=" %%A In ("%FileIncl%") Do Call :CopyUserFile "%$UserProfile%\%%A" "%~1\Files\%%A"
:: Копирование веток реестра по списку
 REG Load HKU\TEMP "%$UserProfile%\NTUSER.DAT" >Nul 2>&1
 If Not ErrorLevel 1 (
    Call :CopyUserRegKeys "%~1" "HKU\TEMP"
    REG Unload HKU\TEMP >Nul
 )
 REG Query "HKU\%~2" >Nul 2>&1
 If Not ErrorLevel 1 Call :CopyUserRegKeys "%~1" "HKU\%~2"

 CHCP 866 >Nul
GoTo :EOF

:CopyUserFile
:: ----------------------------
:: %1 - Source File/Directory
:: %2 - Destination File/Folder
:: ----------------------------
 If Exist "%~1\" XCopy /E/H/Q "%~1" "%~2\" >Nul
 If Not Exist "%~1" GoTo :EOF
 @Echo F|XCopy /H/Q "%~1" "%~2" >Nul
GoTo :EOF

:CopyUserRegKeys
:: ------------------
:: %1 - User Name
:: %2 - Registry Hive
:: ------------------
 For /F "UseBackQ Delims=" %%i In ("%HKCUIncl%") Do (
    @Echo F|XCopy /R/V/Q "%~dpnx0" "%~1\Regis\%%i.reg" >Nul
    If Exist "%~1\Regis\%%i.reg" DEL /Q/F "%~1\Regis\%%i.reg"
    REG Export "%~2\%%i" "%~1\Regis\%%i.reg" >Nul 2>&1
 )
GoTo :EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:30, 27-04-2009 | #6


Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


если вношу в список исключения пользователя Администратор , то он все равно копируется. Подозреваю что это из-за того что он пишется по русски, но CHCP 1251 вроде как есть , не понятно.

Отправлено: 16:13, 30-04-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт для копирования пользователей.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Нужен скрипт cmd,vbs,PowerShell для проверки списка пользователей и их удаление из AD alex_frog Скриптовые языки администрирования Windows 6 22-07-2009 18:41
Скрипт для проверки списка пользователей и их удаление из AD alex_frog Microsoft Windows NT/2000/2003 0 22-07-2009 13:16
Скрипт для копирования файлов с 1 сервера на несколько andro_id Программирование в *nix 2 04-09-2008 11:48
FreeBSD - Помогите написать скрипт для резервного копирования на основе команды CP NickNick Общий по FreeBSD 3 02-06-2008 13:30
Скрипт для создания пользователей Ven Microsoft Windows NT/2000/2003 6 24-02-2008 23:57




 
Переход