使用 PSExec 到 运行 虚拟机上的 WScript 文件时出现 GetObject() 429 错误

GetObject() 429 Error When Using PSExec To Run WScript File On Virtual Machine

我正在使用以下 PSExec 命令 运行 VMware Player 7 虚拟机上的 WScript 文件:

psexec \devtest1 -u "Administrator" -p "password" -h -i 1 -d c:\windows\system32\wscript.exe c:\scripts\closefiles.vbs

此 PSExec 命令 运行 是虚拟机 DEVTEST1 上的 closefiles.vbs 文件。当 运行 时,closefiles.vbs 文件应该检测任何打开的 Excel 2007 实例,如果找到,保存每个打开的工作簿,然后关闭每个工作簿。当 运行 在虚拟机本地时, closefiles.vbs 完美执行。

当我从远程机器使用 PSExec 来执行虚拟机上的 closefiles.vbs 文件时,问题就出现了。 Windows 7 已锁定 UAC 远程访问以防止环回攻击。出于安全原因,我必须保留此限制(我知道如何更改注册表以删除 UAC 远程访问限制)。这意味着在不使用远程桌面客户端(我不能在此应用程序中使用)的情况下,我可以用于 运行 虚拟机上任何应用程序的唯一帐户是虚拟机的管理员帐户。

当我 运行 closefiles.vbs 在虚拟机上使用 PSExec 和来自远程机器的虚拟机管理员帐户和密码时,遇到以下语句时会出现 429 错误:

Set objXL = GetObject( , "Excel.Application")

当管理员以外的任何用户登录到虚拟机时,PSExec 命令对虚拟机 运行 时,总是会发生这种情况。但是当管理员在虚拟机上登录时,closefiles.vbs 文件会完美执行。为什么 closefiles.vbs 在虚拟机管理员登录时起作用,而在任何其他虚拟机用户登录时不起作用?我该如何解决这个问题?这是 closefiles.vbs 代码:

Option Explicit
'--------------------------------------------------

'*** Dimension Local Variables ***
Dim objXL, i

'*** Enable Error Handling ***
On Error Resume Next

'*** Set Excel Object Variable ***
Set objXL = GetObject( , "Excel.Application")

'*** Trap Error And Shutdown Computer If No Open Excel Workbooks ***
If Err.Number > 0 Then 'No open Excel workbooks
 MsgBox ("ErrorLevel ... " & Err.Number)
 Wscript.quit
End If

'*** Save Data And Close Each Open Excel Workbook ***
For Each i In objXL.Workbooks 'Close each open Excel workbook
 i.Save
 i.Close
Next

在此先感谢您提供的任何帮助。

Harry,你对 Office 不允许一个用户操纵另一个用户的进程的观察似乎是我的问题。我什至通过尝试使用任务计划程序 "decoupling" closefiles.vbs UAC 权限的 closefiles.vbs 文件来尝试 运行 closefiles.vbs 使用事件触发器。这没有用,因为 Task Scheduler 也与 UAC 集成在一起。我在 Whosebug 上提出了一个新问题,看看是否有另一种方法可以在

停电触发的关机(closefiles.vbs 脚本的应用)中保存打开的 Excel 文件]

Save & Close Open Excel 2007 Files Automatically BEFORE Shutdown Due To Power Loss