2013-02-13 51 views
3

我想有一個.bat腳本做一個特定的任務作爲一個不同的用戶並且無頭運行(不允許用戶輸入或提示)。有沒有辦法用.bat腳本來做到這一點?請注意,我被限制爲不使用PowerShell,因爲它並未默認安裝在我們必須支持的所有Windows操作系統上。是否有可能在Windows上作爲另一個用戶無頭運行命令(在bat腳本中)?

我已經在我的腳本中考慮了RUNAS,但它顯然需要交互式輸入。

在Linux中,相當於成語是:

echo "Password" | sudo -S -u username "command" 

用於Windows的任何建議的.bat腳本?

更新:我相信vbscript總是在Windows上可用,所以如果通過vbscript提供純粹的無頭解決方案,那也是好的!

回答

7

跑這裏是另一種選擇:

wmic /user:username /password:pass process call create "cmd /c \"d:\\path\\to\\program.exe\" /arg etc" 

編輯:顯然是沒有按在本地機器上不允許使用單獨的憑證進行身份驗證。

有一種方法可以用vbscript調用runas,並讓vbscript將密碼發送到控制檯以自動輸入密碼。

set WshShell = WScript.CreateObject("Wscript.Shell") 
WshShell.run "runas /noprofile /user:USERNAME " + Chr(34) + "d:\path\to\command.exe /args" + Chr(34) 
WScript.Sleep 500 
WshShell.SendKeys "PASSWORD" 
WshShell.SendKeys "{ENTER}" 
set WshShell = nothing 

保存是一個.vbs文件,如果你需要的是從一個批處理腳本運行,只是做一些有創意的回聲通過cscript /nologo script.vbs

調用它。

@echo off 
setlocal 

set username=username 
set password=password 
set program=d:\path\to\program.exe /arg argument 

echo set WshShell = WScript.CreateObject(^"Wscript.Shell^")>runas.vbs 
echo WshShell.run ^"runas /netonly /noprofile /user:%username% ^" + Chr(34) + ^"%program%^" + Chr(34)>>runas.vbs 
echo WScript.Sleep 500>>runas.vbs 
echo WshShell.SendKeys ^"%password%^">>runas.vbs 
echo WshShell.SendKeys ^"{ENTER}^">>runas.vbs 
echo set WshShell = nothing>>runas.vbs 
cscript /nologo runas.vbs 
del /q runas.vbs 

如果不爲你工作,你也可以使用psexec運行具有不同的憑據的程序。

psexec -u USERNAME -p PASSWORD d:\path\to\command.exe 

我能想到的唯一的其他替代方法是通過組策略啓動腳本運行腳本,它將從系統帳戶執行腳本。我也想過從註冊表的HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce中調用它,但我認爲可以從第一個重啓後登錄的用戶啓動它。

+0

看來WMI引擎不允許您使用憑據在本地連接。在錯誤消息中執行上述結果: '用戶憑證不能用於本地連接' 有沒有辦法解決這個問題? – fatbear 2013-02-14 15:10:15

+0

你可以嘗試添加'/ node'參數。 'wmic/node:computername/user:adminuser/password:password process call create「cmd/c \」d:\\ path \\ program.exe \「」**編輯**:不行,這不起作用無論是。讓我玩一下,看看我能想出什麼。 – rojo 2013-02-14 15:12:01

+0

我只是嘗試添加/節點,並嘗試爲計算機名稱完全合格和短的主機名,但我仍然收到上述相同的錯誤消息。感謝這個想法...我還有其他什麼可以嘗試的嗎?剛剛看到你的編輯......感謝你,無論發生什麼事情! – fatbear 2013-02-14 15:16:44

0

嘗試使用runas命令。

runas /user:"DOMAIN\user" "C:\Program Files\path\to\program.exe" /savecred 

您可以保存憑據/savecred,並沒有進入它的另一個時間。

http://technet.microsoft.com/en-us/library/cc771525.aspx

+1

我遇到的問題是,這是一些安裝代碼的一部分(用於內部開發目的,我們將用戶名/密碼放入腳本中)。安裝代碼中沒有任何部分可以訪問用戶輸入,所以沒有機會提前保存憑據,因爲整個腳本正在無頭無阻地運行。正如我在原始問題中提到的那樣,我們已經考慮過** RUNAS **,但作爲問題的一部分,它不是約束的有效選擇。也許問題的答案是,在.bat腳本中沒有辦法做到這一點。 – fatbear 2013-02-14 14:19:31

0

運行方式是做正確的方式。添加/username user /savecred你運行該批處理它會要求用戶的密碼,並在第一時間將其保存,以便今後一段時期,將與保存的憑證

+1

不幸的是,這個問題完全不需要交互式輸入,即使只完成一次。 – fatbear 2013-02-14 15:09:39

相關問題