Войти

Показать полную графическую версию : [решено] Переименование существующего пользователя из командной строки


Aushkin
04-12-2006, 01:58
Ну, собственно как?
Задача такая. Есть образ, он раскатывается с сервака Acronis SD на несколько компов. Там(в имидже) уже существет пользователь "User" с паролем "123", оставлен был потому, что к нему привязано несколько специфичных кривых софтинок и возиться с тем что, куда и сколько они пишут и почему только под юзера никто не хотел. SID при первой загрузке меняется. Дальше стоит задача "батником" переименовать этого юзера в заданное имя и сменить пароль на новый. Порылся тщательно, простите, если пропустил и не увидел, но нашел инфу по созданию юзеров из командной строки, а по переименованию существующих и замене им пароля не нашел. Подскажите решение или ткните носом в ссылку, если пропустил. Заранее всем спасибо.

Vadikan
04-12-2006, 03:49
Aushkinа по переименованию существующихhttp://forum.oszone.net/post-413826-13.html и замене им пароляnet user /?

Aushkin
04-12-2006, 18:58
Большое спасибо!

Aushkin
05-12-2006, 01:08
Создал в Acronis SnapDeploy темплейт, после раскатки образа на целевую машину на неё в %WINDIR% копируются нужные файлы и запускается батник.


cmdow @ /HID
@echo off
renuser User NewUser
net user NewUser password
exit

Утилитка отрабатывает но не дает акронису перезагрузить машину после смены SID, кроме того, после ребута в документс энд сетингс обнаруживается дополнительная юзерская директория NewUser, а в панеле управления в управлении юзерами имя пользователя вообще остаётся прежним, хотя вход в систему осуществляется уже с новым логином и паролем. при этом и отдельного юзера NewUser тоже не создано. Вот такая вот странная работа.

Со второй утилиткой



cmdow @ /HID
@echo off
NetUser User /name:NewUser
net user NewUser password
exit

она тоже отрабатывает и тоже не даёт акронису после смены SID ребутнуться автоматом.
После принудительного ребута дополнительной юзерской директории в документс энд сетингс нет, вход в систему так же с новым именем и паролем, но опять таки в панели управления в управлении юзерами имя пользователя так и остаётся User.

Либо я что-то делаю не так, либо утилитки не полностью работоспособны под XP SP2 и первая делает не всё и не так, вторая ближе к теме, но тоже явно не всё и не везде, где нужно.

Vadikan
05-12-2006, 11:46
Aushkin
Тогда не проще ли скопировать профиль NewUser в Default User, NewUser сразу удалить?

amel27
05-12-2006, 11:53
Aushkin...
испытай тогда еще вариант средствами AutoIT-скрипта, вроде работает (не забудь скомпилировать в EXE):; Переименование и смена пароля локального пользователя.
; Использование:
; AutoIT3.Exe LUserRen.Au3 OldUser NewUser [Password]
; LUserRen.Exe OldUser NewUser [Password]
Select
Case $CmdLine[0] = 2
If _NetUserRename ($CmdLine[1], $CmdLine[2]) Then Exit (@error)
Case $CmdLine[0] = 3
If _NetUserSetPassword ($CmdLine[1], $CmdLine[3]) Then Exit (@error)
If _NetUserRename ($CmdLine[1], $CmdLine[2]) Then Exit (@error)
Case Else
MsgBox (16, 'Ошибка', "Недопустимое количество параметров")
EndSelect

; API-реализация функции переименования локального пользователя
Func _NetUserRename ($sOldUser, $sNewUser, $sServer = "")
Local $ret, $uBUF = DllStructCreate ("ptr")
Local $iCParLen = StringLen ($sNewUser)+1, $iWParLen = BitShift ($iCParLen, -1)
Local $uWPar = DllStructCreate ("byte[" & $iWParLen & "]")
$ret = DllCall ("kernel32.dll", "int", "MultiByteToWideChar", _
"int", 0, _
"int", 0, _
"str", $sNewUser, _
"int", $iCParLen, _
"ptr", DllStructGetPtr ($uWPar, 1), _
"int", $iWParLen)
DllStructSetData ($uBUF, 1, DllStructGetPtr ($uWPar, 1))
$ret = DllCall ("netapi32.dll", "int", "NetUserSetInfo", _
"wstr", $sServer, _
"wstr", $sOldUser, _
"int", 0, _
"ptr", DllStructGetPtr ($uBUF), _
"ptr", 0 )
If $ret[0] Then
SetError ($ret [0])
Return -1
Else
Return 0
EndIf
EndFunc

; API-реализация функции смены пароля локального пользователя
Func _NetUserSetPassword ($sUser, $sPassword, $sServer = "")
Local $ret, $uBUF = DllStructCreate ("ptr")
Local $iCParLen = StringLen ($sPassword)+1, $iWParLen = BitShift ($iCParLen, -1)
Local $uWPar = DllStructCreate ("byte[" & $iWParLen & "]")
$ret = DllCall ("kernel32.dll", "int", "MultiByteToWideChar", _
"int", 0, _
"int", 0, _
"str", $sPassword, _
"int", $iCParLen, _
"ptr", DllStructGetPtr ($uWPar, 1), _
"int", $iWParLen)
DllStructSetData ($uBUF, 1, DllStructGetPtr ($uWPar, 1))
$ret = DllCall ("netapi32.dll", "int", "NetUserSetInfo", _
"wstr", $sServer, _
"wstr", $sUser, _
"int", 1003, _
"ptr", DllStructGetPtr ($uBUF), _
"ptr", 0 )
If $ret[0] Then
SetError ($ret [0])
Return -1
Else
Return 0
EndIf
EndFunc

Aushkin
05-12-2006, 17:25
Aushkin
Тогда не проще ли скопировать профиль NewUser в Default User, NewUser сразу удалить?
Так и делалось, но к сожалению и по непонятным причинам некоторые специфические софтинки под вновь созданным юзером не запускались и приходилось их ставить вручную. Хотя все настройки вроде бы переносились. Это как с renuser, вро де бы делает, и даже работает, но не всё и не везде. Ладно, буду копться дальше. Думаю проще будет наверное разобраться с этими кривыми софтинками и потом просто скидывать инфу в реестр под новым юзером. Тоже выход.




© OSzone.net 2001-2012