0

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

3 回答 3

5

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

  1. 世界上的每个网络服务器都可以将代码转储到客户端机器上并执行它
  2. 您的机器将愉快地执行网络服务器想要的任何内容
  3. 在用户不知情的情况下默默地完成这一切。
  4. 神奇地将世界上的每一台机器变成一台 Windows PC 以便执行这个 VB 脚本代码
  5. 讽刺检测器在网络上变得司空见惯,前面的 4 点将照此读取。

Web 浏览器被锁定,以防止您的窥探代码尝试执行的滥用行为类型,因为您的代码尝试从计算机检索的内容与您无关。

于 2012-01-12T19:29:19.353 回答
2

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

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

你的选择是

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

如果您认为 HTA 合适,请说出来,我会添加到这个答案中。

为了让你开始:

简约的 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 元素。有一个相当过时的向导可以帮助您将 HTA 特定(交互式)元素/代码放入 HTML。一些 MS 安装 CD/DVD/ISO 包含一个 setup.hta,您可以使用它来获得更多灵感;一些 googleing 会将您指向 .hta 应用程序,例如System Documenter Wizard。如果没有仔细的单步测试,这些来源都不可信;例如:我从官方文档开始我的 .hta并且无法让它在 Windows 7 上运行,直到我消除了讨厌的.hta 文件<meta http-equiv="x-ua-compatible" content="ie=9">

虽然您可能会将您的脚本内联到 .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()或'写入'到 HTML 元素的 innerText/HTML 来替换 WScript.Echo 输出document.body.all()

要获得用于收集信息的想法/示例代码,请查看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)中,您可以混合所有(已安装的)ActiveScript 语言(VBScript、JScript、Perlscript、Pythonscript、Rubyscript , ...) 通过内联或通过 src 属性使用 script 标签。这非常适合学习,但通常不适合生产代码。

于 2012-01-12T22:00:29.963 回答
0

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

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

使用 ActiveXObject 的 javascript 示例:

var shellActiveXObject = new ActiveXObject("WScript.Shell");
shellActiveXObject.CurrentDirectory = currentFolder;
shellActiveXObject.Run(executableFullPath, 1, false);
shellActiveXObject = null;
于 2012-01-12T19:32:15.410 回答