从CMD执行VBS命令,而无需保存的VBS文件



当未保存命令时,一个人如何从cmd运行vbs命令?

例如,运行尚未保存的 powerShell 命令可以简单地使用powershell "get-childitem",其中get-childitem是我们要使用的命令。我们不需要保存powershell文件即可运行命令。

假设我们要在不保存vbs文件的情况下运行VBS命令Wscript.Echo Date(),我们该怎么做?

我不想从.bat文件进行此操作。我真的希望将vbs脚本嵌入node.js脚本中。我意识到,这并没有大量反映在问题标题中: -/我想使用Exec并嵌入VBS。重要的是,除一个JS外,没有其他文件。

如果我可以在不使用>任何文件的情况下从CMD控制台运行VBS命令,那么我可以从node.js运行命令,而无需任何其他文件。

我不认为不使用临时文件,无法将VBScript嵌入并执行vbscript?与使用批处理文件有关的回答。

评论看起来要走的方法是使用mshta我要做的是从节点JS脚本访问Windows索引。节点JS允许我执行CMD行命令。因此我可以直接执行此命令 powershell "$connector = new-object system.data.oledb.oledbdataadapter -argument "SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE CONTAINS (System.FileName, '""Google Chrome"" OR Cefclient.exe')", "provider=search.collatordso;extended properties='application=windows';"; $dataset = new-object system.data.dataset; if ($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, before, after;
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`;
before = 'mshta "vbscript:window.close(execute("';
after = '"))"';
vbs = vbs.replace(/n/g,':').
		replace(/"/g, '""').
		replace(/ /g, '"&chr(32)&"');
vbs = before + vbs + after;
$('#vbs').text(vbs);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<code id="vbs"></code>

我可以看到转换方法不是防止故障,而是在这种情况下看不到它在哪里出错。

如果任何人都可以让上述mshta工作,这将不胜感激。

很抱歉复兴这个旧帖子,但是我找到了一种在纯批处理中做到这一点的方法。它使用" mshta.exe",默认情况下,在大多数Windows版本上安装的实用程序。这是一个示例:

mshta vbscript:Close(MsgBox("Hello, World!"))

此方法不写入磁盘。可以在此处找到有关" mshta.exe"的进一步阅读。

希望这会有所帮助。

-gabe

最新更新