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

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

Aushkin 04-12-2006 01:58 520439

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

Vadikan 04-12-2006 03:49 520445

Aushkin
Цитата:

а по переименованию существующих
http://forum.oszone.net/post-413826-13.html
Цитата:

и замене им пароля
net user /?

Aushkin 04-12-2006 18:58 520772

Большое спасибо!

Aushkin 05-12-2006 01:08 520897

Создал в 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 521040

Aushkin
Тогда не проще ли скопировать профиль NewUser в Default User, NewUser сразу удалить?

amel27 05-12-2006 11:53 521043

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 521201

Цитата:

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


Время: 14:06.

Время: 14:06.
© OSzone.net 2001-