Node.js 在不保存vbs文件的情况下从cmd执行vbs命令

Node.js 在不保存vbs文件的情况下从cmd执行vbs命令,node.js,cmd,vbscript,Node.js,Cmd,Vbscript,如果命令未保存,如何从cmd运行vbs命令 例如,要运行尚未保存的powershell命令,只需使用powershell get childitem,其中get childitem是我们要使用的命令。我们不需要保存powershell文件来运行该命令 假设我们想在不保存vbs文件的情况下运行vbs命令Wscript.Echo Date,我们怎么做 我不希望从.bat文件中执行此操作。我真的希望在node.js脚本中嵌入vbs脚本。我意识到这并没有在问题标题中得到充分反映:-/我想使用exec并嵌

如果命令未保存,如何从cmd运行vbs命令

例如,要运行尚未保存的powershell命令,只需使用powershell get childitem,其中get childitem是我们要使用的命令。我们不需要保存powershell文件来运行该命令

假设我们想在不保存vbs文件的情况下运行vbs命令Wscript.Echo Date,我们怎么做

我不希望从.bat文件中执行此操作。我真的希望在node.js脚本中嵌入vbs脚本。我意识到这并没有在问题标题中得到充分反映:-/我想使用exec并嵌入vbs。重要的是,除了js之外,没有其他文件

如果我可以在不使用任何文件的情况下从cmd控制台运行vbs命令,那么我就可以从node.js运行该命令,而不需要任何其他文件

我不认为答案是关于使用批处理文件

在这些评论之后,似乎应该使用mshta 我试图做的是从节点js脚本访问Windows索引。 NodeJS允许我执行cmd行命令。 所以我可以直接执行这个命令 powershell$connector=new object system.data.oledb.oledbdataadapter-argument\SELECT system.ItemPathDisplay FROM SYSTEMINDEX,其中包含system.FileName'\\Google Chrome\\OR Cefclient.exe'\,\provider=search.collatordso;扩展属性='application=windows';\$dataset=新对象system.data.dataset;如果$connector.fill$dataset{$dataset.tables[0]},它将从Windows索引返回结果。此方法的问题是,仅运行powershell大约需要10秒

要在vbs中执行相同的操作,可以使用

Set objConnection=CreateObject("ADODB.Connection")
Set objRecordSet=CreateObject("ADODB.Recordset")
objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
objRecordSet.Open "SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE CONTAINS (System.FileName,'Chrome OR Cefclient.exe')",objConnection
objRecordSet.MoveFirst
Do Until objRecordset.EOF
Wscript.Echo objRecordset.Fields.Item("System.ItemPathDisplay")
objRecordset.MoveNext
Loop
这要快得多。然而,对于我来说,使用nodejs运行vbs的唯一方法似乎是将代码转换为mshta接受的格式

我现在正在尝试将其转换为有效的mshta格式。为此,我使用了这个片段

var vbs,之前、之后; vbs=`Set objConnection=CreateObjectADODB.Connection Set objRecordSet=CreateObjectADODB.Recordset objConnection.openprovider=Search.CollatorDSO;扩展属性='Application=Windows'; 打开并从系统索引中选择System.ItemPathDisplay,其中包含System.FileName、'Chrome或Cefclient.exe',objConnection objRecordSet.MoveFirst 直到objRecordset.EOF为止 Wscript.Echo objRecordset.Fields.ItemSystem.ItemPathDisplay objRecordset.MoveNext 环`; before='mshtavbscript:window.closeexecute'; 在=''之后; vbs=vbs.replace/\n/g“:”。 替换//g“”。 替换//g',&chr32&'; vbs=之前+vbs+之后; $'vbs'.textvbs;
很抱歉恢复这篇旧文章,但我已经找到了一种方法,可以在纯批量中完成这项工作。它使用“mshta.exe”,这是一个默认安装在大多数Windows版本上的实用程序。以下是一个例子:

mshta vbscript:Close(MsgBox("Hello, World!"))
此方法不会写入磁盘。有关“mshta.exe”的更多信息,请参见

希望这有帮助


-Gabe

,我认为,它与您将获得的最接近。您可以加载VBScript引擎并为其提供字符串。任何COM语言(32位除外,无需大量配置)都可以做到这一点。我不知道节点是什么,但是如果它是MS JavaScript,这会加载引擎newObj=new-ActiveXObjectMSScriptControl.ScriptControl。您可以使用JScript或VBScript为其提供数据。任何COM语言C++、VBA、VBScript和基于COM的语言。所有.NET语言都可以使用COM。