如何从网站执行vbscript


how to execute vbscript from website

我有一个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 

好吧,让我们假设我们生活在一个你想要的东西是可能的世界:

  1. 世界上的每一个Web服务器都可以将代码转储到客户端机器上并执行它
  2. 您的机器将愉快地执行Web服务器想要的任何内容
  3. 在用户不知情的情况下安静地完成所有操作
  4. 神奇地将世界上的每一台机器都变成了Windows PC,这样就可以执行VB脚本代码
  5. Sarcasm检测器在网络上变得很常见,前面的4点也会这样读

网络浏览器被锁定是为了防止你的窥探代码试图做的滥用行为,因为你的代码试图从计算机上检索的内容与你无关。

如果你(尤其是chloe的老板)同意,

  • 网站不应该监视客户的电脑
  • 用户有权获得关于他即将安装的软件的系统要求的一些帮助
  • 这样的帮助不应该涉及降低安全设置

你的选择是

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

如果你认为HTA是合适的,就这么说吧,我会补充这个答案。

开始:

极简主义系统需求.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元素。有一个相当过时的向导可以帮助您将HTA特定的(交互式)元素/代码放入HTML中。一些MS安装CD/DVD/ISO包含一个setup.ha,您可以使用它来获得进一步的灵感;一些谷歌搜索会把你指向.hta应用程序,比如系统文档向导。如果没有仔细的一步测试,这些来源都是不可信的;例如:我从官方文档中启动了.hta,直到我清除了讨厌的<meta http-equiv="x-ua-compatible" content="ie=9">,它才能够在Windows7上运行。

虽然您可能会将脚本内联到.hta中,但为了进行开发,最好通过script标记的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中?":在.hta(和.WSF或.WSC)中,您可以通过内联或通过src属性使用脚本标记来混合所有(已安装的)ActiveScript语言(VBScript、JScript、Perlscript、Pythonscript、Rubyscript…)。这非常适合学习,但通常不适合生产代码。

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

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

javascript中使用ActiveXObject:的示例

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