使用Ruby运行VBS脚本

时间:2015-07-24 20:30:24

标签: ruby vbscript sap

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

我想把它移到Ruby,我的其他模块就位。这是可能的,如果是的话,我该如何做到这一点?

修改

更多背景信息:

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

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

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

所以我想我会尝试从Ruby运行VBScripts,如上所述。但是,这样做也需要我将这些变量作为参数传递给VBScripts。

示例:

  1. 运行ruby脚本并将参数传递给VBScript
  2. 运行VBScript
  3. 在系统中执行任务
  4. 退出系统
  5. 解析从系统收到的数据(并非总是如此)
  6. 到目前为止,我已经搜索了这样做的可能性,但我没有找到下面答案中提到的资源。我对此的了解非常有限,因此我在这里问过。

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

    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)
    

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

    问候

    西巴

1 个答案:

答案 0 :(得分:2)

根据“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]