最近开发了一个应用,需要和其他人提供的脚本做接口。条件约束比较严:

  • 应用(下面简称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用户启动。


 

欢迎拍砖。

posted on 2016-01-12 12:12  Achtung  阅读(2642)  评论(0编辑  收藏  举报