GetObject的()429错误时使用PSEXEC要运行WScript的文件在虚拟机

问题描述:

我使用以下PSEXEC命令运行在VMware Player 7的虚拟机上的WScript的文件:GetObject的()429错误时使用PSEXEC要运行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远程访问限制)。这意味着我可以用来在虚拟机上运行任何应用程序的唯一帐户(不使用远程桌面客户端(我无法在此应用程序中使用))是虚拟机的管理员帐户。

当我运行使用PSEXEC和虚拟机从远程计算机时遇到下面的语句它给了我一个429错误虚拟机的管理员帐户和密码在closefiles.vbs:

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

这ALWAYS当管理员以外的任何用户在虚拟机上登录时,将针对虚拟机运行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 

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

+0

仔细检查交互式用户登录到的会话编号,即psexec命令行中的'-i 1'。任务管理器可以通过“选择列”选项向您显示会话编号。但是,如果COM只能找到与正在进行呼叫的同一用户关联的现有Excel.Application对象,我不会感到惊讶。 –

+0

我没有在我原来的文章中包括这个,但我正在使用qwinsta查询虚拟机并将其活动用户会话编号作为变量%id%返回给PSExec命令(qwinsta和PSExec都存在.cmd文件从远程机器运行到虚拟机)。我想尽可能简单地保留我原来的帖子。我知道会话编号是交互式工作的,因为我可以在虚拟机上成功显示WScript shell.popup消息。有没有办法让COM不能“看到”交互式工作的会话号码? –

+0

如果脚本可以向用户显示消息,它将在正确的会话中运行,所以这不是您的问题。COM或Office COM对象似乎更有可能在不同的用户帐户之间实施分离。但是,它可能仍然与psexec有关。要消除这种可能性,请尝试以其他用户身份登录到VM,然后使用“run as”在管理员帐户的上下文中运行该脚本。我怀疑你会发现这也行不通。 –

哈利,你对Office的观察不允许一个用户操纵另一个用户的进程似乎是我的问题。我甚至尝试通过尝试使用任务计划程序使用事件触发器运行closefiles.vbs来从UAC权限中“解耦”closefiles.vbs文件。这不起作用,因为Task Scheduler也与UAC集成。我已经打开*上了一个新问题,看看是否有在

保存&关闭打开的另一种方法来保存在由停电(的closefiles.vbs脚本的应用程序)触发关闭打开的Excel文件Excel 2007文件自动关闭前 电源丢失