关于domain user用户执行admin权限安装-AutoIt(RunAs)网络
身边有同事、朋友,还有一些网友给我留言:关于domain user用户如何经过另外一个管理员权限用户来执行程序安装。。。。dom
暂无论须要安装的程序是什么,先不妨试试我写的一段测试用的脚本示例:ide
#cs Au3 版本: v3.3.9.21 (Beta) 脚本做者:boyhong 技术介绍: http://boyhong.blog.51cto.com #ce #NoTrayIcon ;自行修改如下信息为你实际信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" Local $DOMAIN="tdomain.cn" If IsAdmin() Then Local $ADMIN="当前管理员权限运行" Else Local $ADMIN="当前非管理员权限运行" EndIf Local $pid = RunAs($sUserName, $DOMAIN, $sPassword, 0, @WindowsDir&"\regedit.exe") ;说明:若返回值为0,请确认:1:这个user的信息是否确认?2:当前是否保持了域网络链接. MsgBox(262144+0,$ADMIN,"返回值:"&$pid)
固然:若测试想基于本地管理员组的话,只需修改:测试
#cs Au3 版本: v3.3.9.21 (Beta) 脚本做者:boyhong 技术介绍: http://boyhong.blog.51cto.com #ce #NoTrayIcon ;自行修改如下信息为你实际信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" If IsAdmin() Then Local $ADMIN="当前管理员权限运行" Else Local $ADMIN="当前非管理员权限运行" EndIf Local $pid = RunAs($sUserName, @ComputerName, $sPassword, 0, @WindowsDir&"\regedit.exe") ;说明:若返回值为0,请确认:1:这个user的信息是否确认?2:当前是否保持了域网络链接. MsgBox(262144+0,$ADMIN,"返回值:"&$pid)
请保证经过这个测试(经过测试的表现如以上脚本所示,返回值非0,而且打开注册表),而后的而后,就没有而后了。。。。。blog
那么,为何这么说呢?个人理解是:继承
1.若经过了这个测试,代表:$sUserName 指定的用户名及相关密码,域这几个基本信息填写正确,防有马大哈出现;进程
2.能够肯定经过domain user普通用户使用其它本地管理员组或者直接域管理员来运行任意程序。it
3.在此测试基础上修改为生产应用环境就易而反掌了。class
那么,在实际生产环境中,依然有一些程序安装使用如此方法不可行,那会有哪些可能呢?返回仔细看:登录
RunAs ( "用户名", "域", "密码", 注册标志, "程序" [, "工做目录" [, 显示标志 [, 选项标志 ]]] )
其中第四个参数:
0 - 不加载配置文件的交互式登陆. 1 - 加载配置文件的交互式登陆. 2 - 使用网络证书. 4 - 继承调用进程的环境, 而不是用户环境.
可能在一些实际生产环境中得使用加载配置文件的交互式登陆.
若你有更好的想法能够分享一下,在此感谢。
2014.4.5更新:
有朋友QQ问我如何运行自身呢?这样能够单一文件搞定...其实Autoit有个宏:@AutoItExe,示例代码以下:
#cs Au3 版本: v3.3.9.21 (Beta) 脚本做者:boyhong 技术介绍: http://boyhong.blog.51cto.com #ce ;自行修改如下信息为你实际信息 Local $sUserName = "autosetupsoftware" Local $sPassword = "abc123#" Local $DOMAIN = "tdomain.cn" If IsAdmin() Then Local $ADMIN = "当前管理员权限运行" Exit Else Local $ADMIN = "当前非管理员权限运行" Local $pid = RunAs($sUserName, $DOMAIN, $sPassword, 0, @AutoItExe) ;说明:若返回值为0,请确认:1:这个user的信息是否确认?2:当前是否保持了域网络链接. MsgBox(262144 + 0, $ADMIN, "返回值:" & $pid) EndIf