【问题标题】:Running a VBScript over SSH from Linux to Windows通过 SSH 从 Linux 到 Windows 运行 VBScript
【发布时间】:2011-05-19 21:00:48
【问题描述】:

这是我的困境:

我有一些 SAS 代码,作为其 [有点] 广泛处理的一部分,它会在“Excel”中生成数据质量报告。加引号的原因是 SAS 只真正生成可以在 Excel 中打开的 XML 文档。

然而,事实证明,大多数版本的 Excel 在打开上述 XML 文件时都会抱怨(通过对话框),而某些版本的 Excel 甚至不会走那么远。

为了缓解这种情况,有人必须手动打开这个“excel”文件并将其保存为真正的 excel 文件,然后再将其发送给其他 [重要] 人。

显然,我们希望将其自动化。这甚至不是问题。我创建了一个简单的 VBScript 小程序来打开文件,并将其保存为 Excel。繁荣。问题解决了。嗯,不是真的。

事实证明,将这个 VBScript 合并到正常的数据处理中是一个 PITA,因为这一切都发生在 Linux Box 上。好吧,看起来还不错。我们设置了一个具有限制使用 ID 的虚拟 windows 终端服务器,它可以 ssh 进入盒子并运行某个命令。 linux 机器上的 bash 脚本现在将 XML 文件 SCP 到 windows VM 中,与 VBScript 一起在一个文件夹中,并尝试使用

远程执行 VBScript
cscript myscript.vbs myxlsfile.xls

理论上,这应该工作,但它会出错并显示警告:

Microsoft Excel 无法访问文件“myxlsfile.xls”。有几个可能的原因: 等等

有人知道可能出了什么问题吗?

这是 VBScript:

Set oXL = CreateObject("Excel.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
oXL.DefaultFilePath = "C:\Temp"
oXL.DisplayAlerts = False
oXL.Visible = False
If FSO.FolderExists(oXL.DefaultFilePath) Then
   Set xmlFile = FSO.GetFile(oXL.DefaultFilePath & "\" & TargetFileName)
   oXL.Workbooks.Open(xmlFile.Name)

   ' -4143 is Excel 2003 format
   oXL.ActiveWorkBook.SaveAs xmlFile.Name, -4143
   oXL.ActiveWorkBook.Close SaveChanges = True
   Set oFolder = Nothing
End If
oXL.DisplayAlerts = True
oXL.Quit
Set oXL = Nothing

谢谢, -- 一个

编辑:也许值得重申的是,当我从 Windows 术语服务器上的命令行运行它时,它似乎工作得很好。我还尝试回显所有各种路径/文件名变量,以确保它们正确输入并且它们(在两种情况下)

【问题讨论】:

  • 你找到解决方案了吗?除了使用 XP 吗?我遇到了完全相同的情况
  • Naw .. 就像我在我发布的答案中所说的那样,我们创建了一个 XP VM,并且它已经运行了 4 年了,我们没有遇到任何问题,所以我们不会触摸它:)
  • 谢谢!我们能够弄清楚更改 dcom 设置,从那时起一直工作正常,但我还是会分享它。

标签: vbscript ssh sas


【解决方案1】:

运行脚本的用户是否有权访问c:\temp\myxlsfile.xls

尝试从 ssh 会话运行 type c:\temp\myxlsfile.xls

【讨论】:

  • 是的,不幸的是,这似乎不是权限问题。我们使用与SSHing相同的ID直接登录TS并运行VBScript等。
  • 试试这个:在ssh会话echo a > test.xls,然后看VB脚本能否打开test.xls
  • 我使用的是 SSH 命令行,所以我使用了以下命令: $SSHCommand -i "cd c:\Users\myUsers\myDir && echo a > test.xls && cscript myscript .vbs test.xls" 我看到创建了 xls 文件,但尝试在 vbscript 中打开它时出现同样的错误
  • 只是为了验证一切,请尝试检查FSO.FileExists(oXL.DefaultFilePath & "\" & TargetFileName)
  • 我怀疑 FileExists 返回了 -1.. 不知道为什么.. Aargh windows!
【解决方案2】:

您是否有某种登录脚本在您以交互方式登录时正在执行但不由 SSH 客户端执行?如果文件存在于网络路径上(我知道在您的示例中您显示 c:\temp ... 但以防万一)并且没有创建这些网络连接,那么它可能会给您带来这个问题。即使您使用的是 UNC 路径名,这也是如此......

【讨论】:

  • 这是一个很好的观点,也是我们通过这样做排除的第一件事(使用 c:\Users 作为基本文件夹)。另请注意,实际的 vbscript 与 xls 文件位于同一文件夹中,因此我们正在尽最大努力让他轻松:)
【解决方案3】:

如果你还没有解决这个问题,我有点不清楚你在做什么。您在 Linux 上运行 SAS 并将 XML 文件写入 Windows?然后 Excel 正在读取这个 XLM 文件。

现在这对你没有任何好处,但是如果你获得了 PC 文件格式的 SAS/Access 接口(我认为它适用于 Linux),你就可以在 Linux 上使用 Excel 引擎分配一个 libref并将其指向 Windows 框上的目录,这样您就可以直接从服务器上的 SAS 写入 Excel 工作簿。这就是我们在 AIX-Windows 环境中所做的事情。它不是很快,因为它使用 ODBC,但它很可靠。当然,它需要额外的 SAS 软件许可费用。

祝你好运。

【讨论】:

    【解决方案4】:

    我通过使用运行 VBS 代码的 XP 虚拟机解决了这个问题。它使用 Office 2003。我们没有彻底排除导致它无法在带有 Office 2007 的 Windows 7 VM 上运行的所有变量,但目前这对我们有效,因此我们决定不再花时间在它上面。唯一的缺点是转换后的文件在最新的 Office 版本中打开时会以保护模式打开。这对我们来说不是一个大问题,因为这个电子表格是为使用 Office 2003 的人设计的。

    感谢大家的帮助。欣赏它。

    -- 一个

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 2021-07-23
      • 2013-10-09
      • 2016-09-17
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2020-12-01
      相关资源
      最近更新 更多