我使用以下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远程访问限制)。这意味着我可以用来在虚拟机上运行任何应用程序而不使用远程桌面客户端(我无法在此应用程序中使用)的唯一帐户是虚拟机的管理员帐户。
当我使用PSExec在虚拟机上运行closefiles.vbs以及远程计算机上的虚拟机管理员帐户和密码时,遇到以下语句时会出现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
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
Harry,您对Office的观察不允许一个用户操纵另一个用户的进程似乎是我的问题。我甚至试图通过使用任务计划程序使用事件触发器运行closefiles.vbs来尝试将offfiles.vbs文件与UAC权限“解耦”。这不起作用,因为Task Scheduler也与UAC集成。我在StackOverflow上打开了一个新问题,看看是否有另一种方法可以在停电触发的关机中保存打开的Excel文件(closefiles.vbs脚本的应用程序)
保存&关闭到期之前自动关闭打开Excel 2007文件 对电力损失