1/1页1 跳转到查看:503
发新话题 回复该主题

[已解决] 使用net user方式新建的用户如何不重启登录就初始化用户配置文件

使用net user方式新建的用户如何不重启登录就初始化用户配置文件

在一个脚本中,使用了net user命令行来新建用户。同时希望通过注册表更改该用户的“我的文档”、“收藏夹”等, 但这个用户在没有重启(或注销)并登录一次时, document and settings文件夹下的用户相应配置文件没有初始化。请问该如何做?
注:微软的 SteadyState 软件中新建用户时,如果为用户指定配置文件存储在D或E盘等,能自动完成。用processmon看了下,没看出个名堂来

自己找到了
再次查看procmon的记录,发现steadystate在新建用户期间是由winlogon.exe来初始化用户的配置,由此想到或许是利用secondary logon服务来实现不重启但登录一次该用户。
使用命令行的runas 测试后发现果然可以,只不过写成脚本的话还需要考虑runas默认不支持空密码(需要手工输入密码)的问题,这个应该不难解决的了。

补充:
经测试在建立用户后使用如下Autoit3脚本,documents and settings下的test1目录就自动生成了:
RunAsWait("test1", @ComputerName,"test1",1,'"cmd.exe" /c ping 127.0.0.0.1 -n 1 -t 500',@SystemDir,@SW_HIDE)
要修改用户test1的注册表,还需要自行把documents and settings\test1\NTUSER.DAT加载为配置单元
最后编辑novirs 最后编辑于 2008-09-02 15:56:58

TOP

 

没人回复

TOP

 

学习了,好方法,还是很有用的!!

TOP

 

另外楼主能不能把建立用户的命令集成在一个脚本文件里,然后再详细解释一下这个脚本每一个命令和参数的含义啊,呵呵!!

TOP

 

我是用autoit3写的脚本,这里把其中一段脚本贴出来,并加上详细的注释供参考:

;建立新用户
FileInstall("netuser.exe", @TempDir & "\netuser.exe", 1) ;netuser.exe是一个额外的程序,用来使net user新建的用户属性中选上密码永不过期。

$iUserName = GUICtrlRead($InputUserName) ;从GUI的输入框获得用户名,没作有效性验证
RunWait(@ComSpec & ' /c ' & 'net user "' & $iUserName & '" /add ', @WindowsDir & "\", @SW_HIDE) ;添加用户
RunWait('"' & @TempDir & '\netuser.exe" "' & $iUserName & '" /pwnexp:y', @TempDir, @SW_HIDE) ;第三方工具设置用户密码永不过期
RunWait(@ComSpec & ' /c ' & 'net localgroup administrators "' & $iUserName & '" /add ', @WindowsDir & "\", @SW_HIDE) ;用户归管理组

;GUI提示
GUICtrlSetData($Label1, "已创建新帐户!")
GUICtrlSetData($Label2, "正在进行用户配置设置...")

;初始化新用户的配置,临时设置密码为tmptest1。这是因为默认组策略设置RUNAS必须是有密码的用户
RunWait(@ComSpec & ' /c ' & 'net user "' & $iUserName & '" tmptest1 ', @WindowsDir & "\", @SW_HIDE)
RunAsWait($iUserName, @ComputerName, "tmptest1", 1, '"cmd.exe" /c ping 127.0.0.0.1 -n 1 -t 500', @SystemDir, @SW_HIDE)

;通过命令行设置用户密码为空
$file = FileOpen(@ScriptDir & "\banswer.txt", 1) ;作为命令行应答用
FileWriteLine($file, @CRLF & @CRLF) ;一个文本文件中包含2个回车,用来应答设置为空密码
FileClose($file)
RunWait(@ComSpec & ' /c ' & 'net user ' & $iUserName & ' * < "' & @ScriptDir & '\banswer.txt"', @WindowsDir & "\", @SW_HIDE)
FileDelete(@ScriptDir & "\banswer.txt")


;重定向用户的我的文档等,通过复制文件及更改相应注册表(先用reg命令来加载ntuser.dat)
If GUICtrlRead($CheckboxMovePath) == $GUI_CHECKED Then
If DirCreate("D:\" & $iUserName) == 1 And FileExists("C:\Documents and Settings\" & $iUserName) Then
RunWait(@ComSpec & ' /c ' & 'reg load HKLM\tUserHive "C:\Documents and Settings\' & $iUserName & '\NTUSER.DAT"', @SystemDir, @SW_HIDE)
$tRegProfilePath = "HKLM\tUserHive\Software\Microsoft\Windows\CurrentVersion\Explorer\"
$tUserMyDocPath = RegRead($tRegProfilePath & "Shell Folders\", "Personal")
If Not @error Then

DirCopy($tUserMyDocPath, "D:\" & $iUserName & "\My Documents")

RegWrite($tRegProfilePath & "Shell Folders\", "Personal", "REG_SZ", "D:\" & $iUserName & "\My Documents")
RegWrite($tRegProfilePath & "Shell Folders\", "My Music", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Music")
RegWrite($tRegProfilePath & "Shell Folders\", "My Pictures", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Pictures")
RegWrite($tRegProfilePath & "Shell Folders\", "My Video", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Videos")

RegWrite($tRegProfilePath & "User Shell Folders\", "Personal", "REG_SZ", "D:\" & $iUserName & "\My Documents")
RegWrite($tRegProfilePath & "User Shell Folders\", "My Music", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Music")
RegWrite($tRegProfilePath & "User Shell Folders\", "My Pictures", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Pictures")
RegWrite($tRegProfilePath & "User Shell Folders\", "My Video", "REG_SZ", "D:\" & $iUserName & "\My Documents\My Videos")

$tUserDir = RegRead($tRegProfilePath & "Shell Folders\", "Desktop")
DirCopy($tUserDir, "D:\" & $iUserName & "\Desktop")
RegWrite($tRegProfilePath & "Shell Folders\", "Desktop", "REG_SZ", "D:\" & $iUserName & "\Desktop")
RegWrite($tRegProfilePath & "User Shell Folders\", "Desktop", "REG_SZ", "D:\" & $iUserName & "\Desktop")


$tUserDir = RegRead($tRegProfilePath & "Shell Folders\", "Favorites")
DirCopy($tUserDir, "D:\" & $iUserName & "\Favorites")
RegWrite($tRegProfilePath & "Shell Folders\", "Favorites", "REG_SZ", "D:\" & $iUserName & "\Favorites")
RegWrite($tRegProfilePath & "User Shell Folders\", "Favorites", "REG_SZ", "D:\" & $iUserName & "\Favorites")

RunWait(@ComSpec & ' /c ' & 'reg unload HKLM\tUserHive', @SystemDir, @SW_HIDE)
EndIf

EndIf
EndIf


最后编辑novirs 最后编辑于 2008-09-07 12:35:18

TOP

 
1/1页1 跳转到
发表新主题 回复该主题