如何从网站执行vbscript

时间:2012-01-12 19:24:17

标签: php vbscript system jscript

我有一个VBScript文件。当它在电脑上它工作正常。我想把它放在一个php网站上,点击按钮即可执行它。但我没有成功。它实际上得到了电脑信息。希望它能在用户机器上运行。任何想法将不胜感激。如果或者如果有人知道如何使用jscript

以下是代码:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colSettings 
    Wscript.Echo "OS Name: " & objOperatingSystem.Caption
    Wscript.Echo "Version: " & objOperatingSystem.Version  
    Wscript.Echo "Available Physical Memory: " & _
        objOperatingSystem.FreePhysicalMemory
Next

Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
        Wscript.Echo "Total Physical Memory: " & _
        objComputer.TotalPhysicalMemory
Next

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colSettings= objWMIService.ExecQuery _
    ("SELECT * FROM Win32_DiskDrive")
For Each objItem In colSettings
      WScript.Echo "Disk Size: " & objItem.Size 
   Next

Dim WSHShell 
Dim objAdr 
On error resume next 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names") 
If err.number > 0 Then 
msgbox "SQL Server not found" 
else msgbox "SQL Server found" 
end if 

3 个答案:

答案 0 :(得分:5)

好吧,让我们假装我们生活在一个你想要的世界:

  1. 世界上的每个网络服务器都可以将代码转储到客户端计算机上并执行它
  2. 您的计算机将很乐意执行网络服务器想要的任何内容
  3. 在用户不知道的情况下默默地完成所有工作。
  4. 将世界上的每台机器神奇地转变为Windows PC,以便可以执行此VB脚本代码
  5. 讽刺探测器在网络上变得司空见惯,前4点将会这样读。
  6. Web浏览器被锁定以防止您的snoop代码尝试执行的滥用行为的类型,因为您的代码试图从计算机检索的内容是您的业务。

答案 1 :(得分:1)

如果你(特别是克洛伊的老板)同意,那

  • 网站不应该监视客户端的计算机
  • 用户有权获得对他即将安装的软件的系统要求的一点帮助
  • 此类帮助不应涉及降低安全设置

您的选择

  • 列出要求并详细说明如何确定它们
  • windows:为用户(下载)提供生成/显示相应报告的HTA(HTML Application)的来源
  • unix / linux:为用户(下载)提供生成/显示相应报告的脚本源(选择至少两种流行语言)
  • 鉴于您无论如何都会编写一个安装程序来检查要求,您可以将这些检查捆绑到一个独立的“确保要求”应用程序

如果您认为HTA适合,请说明,我将添加此答案。

为了帮助您入门:

Minimalistic sysreq.hta:

<html>
    <head>
      <title>System Requirements For XXX</title>
      <hta:application
         id="sysreq"
      ></hta>
      <script type="text/vbscript" src="sysreq.vbs"></script>
      <script type="text/jscript" src="sysreq.js"></script>
    </head>
    <body onload="onload">
      <table id="tblSysReq" border="1" summary="KeepTidyHappy">
       <tr>
        <td id="tdOS">
        </td>
       </tr>
       <tr>
        <td id="tdMSSQL">
        </td>
       </tr>
      </table>
    </body>
</html>

对于生产版本,您应该使用HTML编辑器/ ide编写一个不错的页面,然后插入hta元素。有一个相当过时的wizard可以帮助您将HTA特定(交互)元素/代码放入HTML中。某些MS安装CD / DVD / ISO包含一个setup.hta,您可以使用它来获得更多灵感;一些谷歌会指向你.hta应用程序,如System Documenter Wizard。没有仔细的单步测试,这些来源都不可信;例如:我从the official docs开始我的.hta并且无法让它在Windows 7上运行,直到我破坏了令人讨厌的<meta http-equiv="x-ua-compatible" content="ie=9">

虽然您可能会将脚本内嵌到.hta中,但为了开发它,最好通过脚本标记的src属性包含代码。在sysreq.vbs中:

Sub onload()
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
    For Each objOperatingSystem in colSettings
        ' Wscript.Echo "OS Name: " & objOperatingSystem.Caption
        document.getElementById("tdOS").innerText = "OS Name: " & objOperatingSystem.Caption
    Next
    If False Then
       Dim WSHShell : Set WSHShell = CreateObject("WScript.Shell")
      On error resume next
       ' test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names")
       test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL\SQLEXPRESS")
       If 0 <> Err.Number Then
          ' msgbox "SQL Server not found"
          MsgBox Err.Description
          test = "SQL Server <b>not</b> found"
       Else
          ' msgbox "SQL Server found"
          test = "<i>SQL Server found</i>"
       End If
       document.body.all("tdMSSQL").innerHTML = test
    Else
       JsHelper
    End If
End Sub

我试图遵循您发布的代码;必要的更改是通过使用document.getElementById()document.body.all()“写入”HTML元素的innerText / HTML来替换WScript.Echo输出。

要获取收集信息的想法/示例代码,请查看Scriptomatic等工具。正如你提到的JScript,我引入了sysreq.js:

function JsHelper() {
    var WSHShell = new ActiveXObject("WScript.Shell")
    try {
      var test = WSHShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL\\SQLEXPRESS");
      document.all.tdMSSQL.innerHTML = "<i>SQL Server found</i>";
    }
    catch(e) {
      alert(e);
      document.all.tdMSSQL.innerHTML = "SQL Server <b>not</b> found";
    }
}

让你比较处理同样问题的JScript和VBScript代码。

这是值得的 - 使用非特权用户帐户在Windows XP和7上对此进行了测试;我希望你的里程可能不会有所不同。

WRT chloe的问题“是否可以在同一个hta中放置两种不同的脚本语言?”:在.HTAs(和.WSFs或.WSC)中,您可以混合所有(已安装的)ActiveScript语言(VBScript,JScript,Perlscript, Pythonscript,Rubyscript,...)通过内联或通过src属性使用脚本标记。这非常适合学习,但通常不适合生产代码。

答案 2 :(得分:0)

您可以像外部js文件一样包含外部vbscript文件,但它只能在Windows环境中的IE中运行,具有特殊权限。

您可以使用ActiveXObject从客户端计算机运行可执行文件,并且需要在客户端计算机上安装可执行文件,并具有浏览器执行它的适当权限。

使用ActiveXObject的javascript示例:

var shellActiveXObject = new ActiveXObject("WScript.Shell");
shellActiveXObject.CurrentDirectory = currentFolder;
shellActiveXObject.Run(executableFullPath, 1, false);
shellActiveXObject = null;