2015-04-23 1 views
0

Я использую следующую команду Psexec запустить WScript файл на VMware Player 7 виртуальной машине:GetObject() 429 Ошибки при использовании Psexec Для запуска WScript файла на виртуальную машину

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

Эта команда Psexec бежит файл closefiles.vbs на виртуальной машине DEVTEST1. При запуске файл 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 

Заранее благодарим за любую помощь, которую вы можете предоставить.

+0

Дважды проверьте номер сеанса, что интерактивный пользователь регистрируется на, т.е., '-i 1' в Psexec командной строки. Диспетчер задач может отображать номера сеансов с помощью опции «Выбрать столбцы». Но я не удивлюсь, если COM может найти только существующие объекты Excel.Application, связанные с тем же пользователем, который выполняет вызов. –

+0

Я не включал это в свой первоначальный пост, но я использую qwinsta для запроса виртуальной машины и возвращения ее активного номера сеанса пользователя в команду PSExec в качестве переменной% id% (и qwinsta, и PSExec присутствуют в том же .cmd, который запускается с удаленного компьютера с виртуальной машиной). Я хотел сохранить свой оригинальный пост как можно проще. Я знаю, что номер сеанса работает в интерактивном режиме, потому что я могу успешно отобразить сообщение WScript shell.popup на виртуальной машине. Есть ли способ, что COM не будет «видеть» номер сеанса, который работает в интерактивном режиме? –

+0

Если сценарий может отображать сообщение пользователю, он работает в правильном сеансе, так что это не ваша проблема.Скорее всего, COM или объекты COM COM обеспечивают разделение между различными учетными записями пользователей. Однако это может быть связано с psexec. Чтобы устранить эту возможность, попробуйте войти в виртуальную машину в качестве другого пользователя, а затем используйте «запустить как» для запуска сценария в контексте учетной записи администратора. Я подозреваю, что вы обнаружите, что это тоже не сработает. –

ответ

0

Гарри, ваше наблюдение о том, что Office не позволяет одному пользователю манипулировать процессами других пользователей, является моей проблемой. Я даже попытался «развязать» файлы closefiles.vbs из разрешений UAC, пытаясь использовать Task Scheduler для запуска closefiles.vbs с помощью триггера события. Это не сработало, поскольку Task Scheduler также интегрирован с UAC. Я открыл новый вопрос о StackOverflow, чтобы увидеть, если есть другой подход к экономии открыть файл Excel в завершении работы, вызванное отключением питания (приложение сценария closefiles.vbs) в

Сохранить & Закрыть Открыть Excel 2007 файлов автоматически до выключения из к потере мощности

Смежные вопросы