2013-07-17 173 views
2

我想從服務器上的ASP文件(IIS-6)上運行VBS文件 我已更改安全性,因此必須登錄到服務器才能訪問ASP頁面(這樣ASP就可以存儲VBS文件的存儲位置)。從IIS(ASP)運行服務器上的VBS腳本

所以,我有一個Default.asp的頁面,看起來像這樣:

<%response.write "hello" 'just for debugging purposes. 
set objshell = server.createobject("wscript.shell") 
objShell.Run "c:\test\test.vbs",0,true '0=no interaction, true=wait for command to finish%> 

VBS文件只是一個空文件(一些言論),所以會發生什麼,是應該的WScript運行,什麼都不做,關閉wscript.exe並返回它完成。

以上例子中發生的情況是,在服務器上wscript.exe啓動,網頁等待命令完成。但是wscript.exe本身不會退出/停止。如果我結束了wscript.exe進程,那麼該頁面將繼續加載。但VBS不會被執行。

所以我已經嘗試了一些修改,我添加了代碼到VBS文件以寫入執行時間的文件,所以我知道它不會運行VBS文件。

我也曾嘗試objshell.run/exec命令的其他變體:

objsshell.exec("cscript.exe /B /H:Cscript c:\test\test.vbs") ' nothing happens at all. 
objsshell.exec("wscript.exe /B /H:Cscript c:\test\test.vbs") ' wscript and "hangs" 

任何人有我如何獲得VBS命令來運行,並且WScript.exe的進程退出任何提示?

+0

顯然你的ASP代碼工作得很好,問題在於'test.vbs'中的VBScript代碼,所以你需要顯示/檢查代碼。 –

+0

那麼,如上所述,我只有一個空文件。它什麼都不做......因此,它應該運行文件,退出並返回0(成功)......但它不會......因此,文件中沒有任何可檢查或顯示的內容。 – Sourcery

+0

權限。首先,爲該文件及其父文件夾授予IIS用戶權限。 –

回答

7

我想在回答幾個小時後回答我自己的問題,因爲我認爲我的發現比我更有趣。

  1. 要了解進入服務的內容,請選中World Wide Web服務的「與桌面互動」複選框。這樣所有的錯誤和msgboxes顯示在控制檯上。

通過編寫以下小ASP的頁面,我們得到了一個控制檯/ CMD窗口,使索姆測試用:

<% 
set objshell=server.createobject("WScript.Shell") 
objshell.run "cmd.exe" 
%> 

執行此操作時伴隨着「與桌面交互」你得到一個命令行窗口,如果你在這個窗口中寫

echo %userprofile% 

你得到運行cmd窗口的用戶。在我們的案例中,它是「默認用戶」。

  1. 在測試運行VBS腳本,我們發現,「默認用戶」沒有必須的wscript.dll註冊,我們不可能得到它要麼註冊。我們從來沒有深究爲什麼。

  2. Cscript然而並不需要註冊,並且與桌面的交互也減少了,所以可以停止腳本的東西減少了。我們還發現你需要VBS文件中所有文件的完整路徑(這可能是一個大問題,因爲我們使用相對路徑)。

所以很多擺弄之後,最終的ASP代碼的作品,等待VBS腳本,以做它的東西,然後繼續加載的頁面是:

<% 
set objshell=server.createobject("WScript.Shell") 
objshell.run "cmd.exe /c ""cscript c:\test\test.vbs " + request("any_parameters") + " Another_hardcoded_parameter""",1,true 
set objshell=nothing 
response.redirect("/a_new_page_with_info_from_vbs_file.asp") 
%> 

二者必選其一Windows集成身份驗證或設置一個用戶訪問這些文件作爲匿名用戶的網站工作,但不是很安全。

+0

+1用於以有用的方式與世界分享您的解決方案。 – TheBlastOne

+1

另一個補充。正如我試圖讓這個在IIS 8服務器上的Windows 2012 R2上工作。 要使此功能正常運行,您需要添加文件夾/文件權限IIS APPPOOL \ DefaultAppPool,如果您使用默認應用程序池,如果您在需要文件權限的IIS中創建新的應用程序池,則需要爲該文件授予權限池。 所有解釋在這個serverfault q/a:https://serverfault.com/questions/81165/how-to-assign-permissions-to-applicationpoolidentity-account – Sourcery