无法获取Request.Querystring来传递VBScript中的变量

时间:2015-11-04 07:42:58

标签: vbscript asp-classic

我试图将一个值(在一个url中)传递给一个vbscript,反过来,它将使用它来启动一个可执行文件(在客户端,这就是为什么我使用vbscript)将该值作为参数对于那个可执行文e.g:

启动此exe的语法是

\\HQFileServer\Share Launch.exe 1 computername \\ServerName

所以我将计算机名称作为“名称”传递:

http://localhost/launchclient.asp?Name=Laptop1

launchclient.asp包含:

<script language="vbScript">
set oWshShell = CreateObject("WScript.Shell")
Name = Request.QueryString("Name")
oWshShell.run "\\HQFileServer\Share\Launch.exe " & Name & " \\SCCM2012WAN",1,True
</script>

我尝试通过一次删除一行来调试它,当我意识到,由于某种原因,查询字符串没有传入脚本的接缝。 当我省略Request.QueryString("Name")并输入一个值时 - 它可以工作......

任何想法为什么?

我试图寻找答案,并且无法理解......

1 个答案:

答案 0 :(得分:0)

更新

在阅读this comment之后,我认为我现在明白你想要做什么。

要将服务器端值传递给客户端代码块,只需使用客户端内部的ASP代码块,就像这样;

<script language="vbScript">
set oWshShell = CreateObject("WScript.Shell")
oWshShell.run "\\HQFileServer\Share\Launch.exe ""<%= Request.QueryString("Name") %>"" \\SCCM2012WAN",1,True
</script>

这样ASP引擎会在代码块发送到客户端之前替换<%= Request.QueryString("Name") %>,并且看起来像这样;

<script language="vbScript">
set oWshShell = CreateObject("WScript.Shell")
oWshShell.run "\\HQFileServer\Share\Launch.exe "Laptop1" \\SCCM2012WAN",1,True
</script>

同样mentioned您需要将其视为string值,但由于VBScript使用引号(")来表示字符串,因此必须对字符串中的字符串进行转义,你通过加倍引号(""来实现这一点。

旧答案,但仍然相关 - 是

经典ASP没有处理代码,因为目前它被归类为客户端(HTML)脚本块被忽略并且刚刚通过&#34;按原样#34;在服务器响应中。

有两种方法可以解决这个问题:

  1. 更改脚本标记,以便它知道服务器应该通过将runat="Server"属性添加到script标记来处理它。

    <script language="VBScript" runat="Server">
    set oWshShell = CreateObject("WScript.Shell")
    Name = Request.QueryString("Name")
    oWshShell.run "\\HQFileServer\Share\Launch.exe " & Name & " \\SCCM2012WAN",1,True
    </script>
    
  2. 使用ASP代码块。

    <%
    set oWshShell = CreateObject("WScript.Shell")
    Name = Request.QueryString("Name")
    oWshShell.run "\\HQFileServer\Share\Launch.exe " & Name & " \\SCCM2012WAN",1,True
    %>
    
  3. 为避免与客户端脚本标记混淆,我个人建议使用ASP代码块语法<% %>

    有用的链接