最近開發了一個應用,需要和其他人提供的腳本做接口。條件約束比較嚴:
- 應用(下面簡稱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用戶啟動。
歡迎拍磚。