最近开发了一个应用,需要和其他人提供的脚本做接口。条件约束比较严:
- 应用(下面简称APP)需要以SYSTEM启动。
- 脚本(下面简称SCRIPT)不能以SYSTEM启动,而是以特定用户(下面简称UserA)启动。
- 密码要能自动输入。
一、Runas
运行平台是Windows,第一下想到的是runas,参考了“runas命令的使用及RUNAS自动输入密码的方法”一文,做了以下试验。
runas /user:UserA /savecred "script.bat"
第一次运行会提示输入密码,然后运行脚本,试验成功。
再次运行runas(注意要加/savecred参数),发现不用再次输入密码。
重启电脑后,再次试验,仍然有效。
本以为就这么结束了,然而,用SYSTEM帐户运行后发现,脚本会卡住。
经分析,SYSTEM帐户与直接打开cmd运行是不一样的,属于不同的会话。因而SYSTEM下没有保存过密码,需要重新输入。
方案一失败。
二、 Sanur
使用参考中提到了Sanur,发现该项目早已不再维护,只支持Windows 2003/XP等早期版本。
在cmd下试验就没有成功。
三、lsrunase
该软件在cmd下试验成功(支持Windows 2008),但在SYSTEM下运行不正常,失败。
虽然没成功,但软件还是有点用的,介绍使用步骤:
1. 使用LSencrypt界面程序将原始密码(PwdA)加密为密文(PwdB)。
2. 在cmd下输入以下命令
lsrunase /user:UserA /password:7F1z /command:script.bat /runpath:d:\ /domain:
注意:
- 所有选项都要加上(/user, /password, /command, /runpath, /domain)
- /domain:后留空,表示本机默认域或工作组。
- /password:7F1z,使用加密后的密文(PwdB),而非加密前的密文(PwdA)
四、cpau
该软件Usage特别长,相当于一篇短篇小说了。。。具体用法略。
类似于lsrunase,在cmd下运行正常,在SYSTEM下运行失败,报错误码0xFFFFFFFB(-5)。
又失败了。
五、计划任务
经过一晚上的纠结,终于想出了计划任务。
计划任务具有以下特点,能满足本次需求:
- 支持以特定用户启动。
- 支持保存密码。
- 密码以密文保存,而非明文。
经过试验,可行!
实现结构如下(方括号内为程序、脚本或计划任务,圆括号内为运行用户):
[APP](SYSTEM)-->[Script_intermediate](SYSTEM)-->script_task(UserA)-->SCRIPT(UserA)
加入Script_intermediate脚本,内容为
schtasks /Run /TN /I script_task
计划任务中,新建script_task,内容为调用SCRIPT,并以UserA用户启动。
欢迎拍砖。