【问题标题】:Running VBS script on server from IIS (ASP)从 IIS (ASP) 在服务器上运行 VBS 脚本
【发布时间】:2013-07-17 10:55:58
【问题描述】:

我正在尝试从服务器 (IIS-6) 上的 ASP 文件中运行 VBS 文件 我已经更改了安全性,因此必须登录服务器才能访问 ASP 页面(这样 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 进程有任何提示吗?

【问题讨论】:

  • 显然您的 ASP 代码工作正常,问题在于您在 test.vbs 中的 VBScript 代码,因此您需要显示/检查该代码。
  • 好吧,如上所述,我只有一个空文件。哪个什么都不做......所以,它应该只运行文件,退出并返回 0(成功)......但它没有......所以文件中确实没有任何可以检查或显示的内容。
  • 权限。首先,向 IIS 用户授予文件及其父文件夹的权限。

标签: asp-classic vbscript


【解决方案1】:

经过几个小时的摆弄,我想回答我自己的问题,因为我认为我的发现会比我更有趣。

  1. 要了解发生了什么,请转到服务,选中万维网服务的“与桌面交互”框。这样所有错误和消息框都会显示在控制台上。

通过编写以下小的 asp 页面,我们得到了一个控制台/cmd 窗口来进行 som 测试:

<%
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 集成身份验证或将有权访问这些文件的用户设置为网站的匿名用户,这可以正常工作,但不是很安全。

【讨论】:

  • +1 以有用的方式与世界分享您的解决方案。
  • 另一个补充。当我试图让它在带有 IIS 8 服务器的 Windows 2012 R2 上工作时。要使其正常工作,您需要添加文件夹/文件权限权限 IIS APPPOOL\DefaultAppPool 如果您使用的是默认应用程序池,如果您在 IIS 中创建需要文件权限的新应用程序池,则需要向该池授予文件权限.所有在此服务器故障 q/a 中进行了解释:serverfault.com/questions/81165/…
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多