Node.js 在不保存vbs文件的情况下从cmd执行vbs命令
如果命令未保存,如何从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中执行相同的操作,可以使用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并嵌
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。