情景描述:笔者的公司遇到这样的情况,公司的电脑分配的时候,给用户的权限都是一般使用者,即只有使用权限,没有管理员权限,无法安装软件。现在需要在所有的相关电脑上升级VPN软件,这些电脑如果都在网域里面的话,只要通过组策略,做计算机配置,进行软件分发,客户端策略生效后重启电脑,一般就可以完成软件的升级工作。但是,有一半的用户都是远程用户,通过VPN来进行办公。很少连接到公司网域里面来。要升级VPN,只能单机安装,用户又没有软件安装权限,有一个办法,就是告知用户切换到管理员帐号进行安装,但是这样一来,所有的用户都知道了本地管理员帐号与密码,这样无疑会带来大量的风险,有技术上的可行性,但是从管理的角度是无法实施的。后来,笔者又想到了runas来提升管理员权限,在普通用户下来提升权限,但是公司的电脑启用了Applocker, 而且runas无法很好的进行加密。
根据以上的情况描述,笔者采用了sendkeys的方式,通过键盘发送密码,最后测试成功,并大量的分发给远程用户使用,下面是部分vbs代码:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "runas /user:admin cmd.exe"
WshShell.SendKeys "********{enter}"
Wscript.Sleep(2000)
WshShell.Appactivate "cmd.exe"
WshShell.SendKeys "cd\{enter}"
WshShell.SendKeys "e:{enter}"
WshShell.SendKeys "cd vpn{enter}"
WshShell.SendKeys "vpn.msi /passive{enter}"
Wscript.Sleep(2000)
WshShell.Appactivate "cmd.exe"
Wscript.Sleep(2000)
WshShell.Appactivate "exit{enter}"
采用这种方式,可以执行exe, msi等格式,不受限制,完全模拟客户端操作。脚本执行过程中,不能随意移动键盘/鼠标。
同样,使用sendkeys, 可以解决部分管理员重复的工作,比如每天定时重启路由器,或者每天清理某项纪录。