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

Ответить
Аватара пользователя
mitiya

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

Сообщение mitiya »

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



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 »







Код:
Аватара пользователя
mitiya

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение mitiya »

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

Не могу найти где они лежат.
Аватара пользователя
mitiya

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение mitiya »

Цитата mitiya:



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




типа такого?.. тоже хватает минусов:

- сохраняются ключи целиком, а не отдельные параметры;

- в 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
Аватара пользователя
mitiya

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение mitiya »

Цитата:



Application Data\1C\1Cv81\ibases.v8i скопировался в Application Data\1C\1Cv81\ibases.v8i\ibases.v8i плюс еще папки суда скопировались из папки 1Cv81.



это по прежнему актуально.

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

Можно наверно конечно было бы исполнить команду по экспорту ключей от его имени, но тогда нужно где-то хранить пароли для всех пользователей.
Аватара пользователя
mitiya

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение mitiya »

Цитата amel27:



- в REG-файлах нужно еще как-то заменить "HKEY_USERS\TEMP" на "HKEY_CURRENT_USER"
CMD/BAT - Скрипт для копирования пользователей.




это как раз не проблема, есть такая прога CHGSTR.EXE , она может производить замену текста в файлах.



Кстати я так понял что подключенные-то пользователи как раз появляются в user со своим сидом , так что нужно как-то только проверить подключен ли он сейчас , наверно можно с помощью errorlevel после
Цитата amel27:



REG Load HKU\TEMP "%$UserProfile%\NTUSER.DAT" >Nul
CMD/BAT - Скрипт для копирования пользователей.
Аватара пользователя
amel27

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение amel27 »

Цитата mitiya:



это по прежнему актуально
CMD/BAT - Скрипт для копирования пользователей.




исправил


Цитата mitiya:



я так понял что подключенные-то пользователи как раз появляются в user со своим сидом , так что нужно как-то только проверить подключен ли он сейчас , наверно можно с помощью errorlevel
CMD/BAT - Скрипт для копирования пользователей.




где-то так (пока без замены), исправил ошибки, тестируйте: Изображение



Код:

Код: Выделить всё

@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
Аватара пользователя
mitiya

Re: CMD/BAT - Скрипт для копирования пользователей.

Сообщение mitiya »

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

Вернуться в «Скриптовые языки администрирования Windows»