关于domain user用户执行admin权限安装-AutoIt(RunAs)
身边有同事、朋友,还有一些网友给我留言:关于domain user用户如何通过另一个管理员权限用户来执行程序安装。。。。
暂不管需要安装的程序是什么,先不妨试试我写的一段测试用的脚本示例:
#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,并且打开注册表),然后的然后,就没有然后了。。。。。
那么,为什么这么说呢?我的理解是:
1.若通过了这个测试,表明:$sUserName 指定的用户名及相关密码,域这几个基本信息填写正确,防有马大哈出现;
2.可以确定通过domain user普通用户使用其它本地管理员组或者直接域管理员来运行任意程序。
3.在此测试基础上修改成生产应用环境就易而反掌了。
那么,在实际生产环境中,依然有一些程序安装使用如此方法不可行,那会有哪些可能呢?返回仔细看:
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