ruby - 使用 Ruby 运行 VBS 脚本

标签 ruby vbscript

是否可以从 Ruby 运行 VBScript?我有几个脚本可以自动执行 SAP 系统中的某些任务,目前我正在从 Excel 中运行它们。

我想将其移至 Ruby,我的其他模块就位在那里。这可能吗?如果可以,我该如何实现这一目标?

编辑

更多背景信息:

我正在使用 VBScript 在某些 SAP 事务中执行一些重复的日常任务。我必须将一些数据传入和传出 SAP 系统。我已将 VBScript 集成到 VBA 中,并通过 Excel 运行它们,如有必要,我还会在 Excel 中解析数据。我还将一些变量(用户、交易等)传递给脚本。

现在我需要将这部分从 Excel 移至我的 Ruby 应用程序并在那里触发这些 VBScript,同时收集返回的数据并在 Ruby 应用程序中使用它们。

@nmiranda:我已经浏览了很多 SCN 资源(也是你提到的那个),但我无法使用 ES,因为我没有相应的用户级别。另一种选择是使用 RFC 连接到系统并执行任务 ( https://github.com/mydoghasworms/nwrfc ),但我还没有取得任何成功。

所以我想我应该尝试如上所述从 Ruby 运行 VBScript。然而,这样做还需要我将这些变量作为参数传递给 VBScript。

示例:

  1. 运行 ruby​​ 脚本并将参数传递给 VBScript
  2. 运行 VBScript
  3. 在系统中执行任务
  4. 离开系统
  5. 解析从系统接收的数据(并非总是如此)

到目前为止,我已经搜索了执行此操作的可能性,但尚未找到下面答案中提到的资源。而且我对此的了解非常有限,因此我在这里提问。

现在我已经尝试了下面的建议并且有效:)

require 'open3'
  stdin, stdout, stderr = Open3.popen3('cscript my_script.vbs')

我调用上面的脚本,这会在已经打开的系统中执行任务。

这是最好的方法吗?并且,是否可以将参数传递给 VBScript?

我像这样传递参数:

require 'open3'
  stdin, stdout, stderr = Open3.popen3('cscript my_script.vbs 0001')

并像这样在我的 VBScript 中捕获它们:

WScript.Arguments(0)

这是正确的方法吗?它似乎有效,我只需要确认...

问候

塞巴

最佳答案

基于“5 ways to run commands from ruby”我选择使用popen3 :

master.rb:

require 'open3'
stdin, stdout, stderr = Open3.popen3('cscript ../vbs/slave.vbs')
puts stdout.readlines
puts stderr.readlines

slave.vbs:

WScript.StdOut.WriteLine "slave: stdout"
WScript.StdErr.WriteLine "slave: stderr"

输出:

ruby master.rb
slave: stdout
slave: stderr

ruby -v
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

关于ruby - 使用 Ruby 运行 VBS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619268/

相关文章:

mysql - 在时间戳内获取记录但不特定于日期

excel - 如何使用 VBScript 修改没有 Excel 的 Excel 电子表格?

windows - 使用 vbscript 检查计划任务是否正在运行

vbscript - 为什么 VBScript 的按位 And 在一种情况下失败?

ruby each_line 也读取换行符?

javascript - 从大 HTML 文件中提取 javascript 变量

python - 等价于 Python 中的 Ruby nil 数组

ruby-on-rails - 忽略哈希中的两个参数

powershell - [VSCODE]中的数字签名脚本

vbscript - 预计语句结束 (vbscript)