Возникла необходимость обновления файла Excel и отправлять эти данные по почте. Во время реализации этой задачи сложилась следующая ситуация.
При запуске VB скрипта с сервера
DECLARE @cmd varchar(256) SET @cmd = 'E:\1\refresh.vbs' exec master..xp_cmdshell @cmd
Скрипт нормально запускается под "правильным" пользователем, но реализованный запуск екселя внутри скрипта открывается под "рандомным активным пользователем" из-за чего скрипт вылетает(повисает на ошибках екселя).
[vba]
Код
Set app = CreateObject("Excel.Application") app.Visible = false app.DisplayAlerts = false app.Workbooks.Open ("E:\1\Шаблон.xls") app.Run "Module1.main" app.Workbooks("Шаблон.xls").Saveas ("E:\1\trash_shablon\ШАБЛОН " & Date & ".xls") app.Workbooks.Close app.Quit Set app=nothing
[/vba]
Можно ли как-то исправить такую проблему или возможно ли вызывать "CreateObject("Excel.Application")" под определенным пользователем?
Так же для проверки был написан скрипт, чтобы убедиться в правильности логина.
Sub test() Dim UserName As String Dim WshNetwork As Object Set WshNetwork = CreateObject("WScript.Network") UserName = WshNetwork.UserName
Cells(1, 1) = UserName
End Sub
[/vba]
При запуске в ручную скрипт и макрос возращают логин запустившего, но если запустить с сервера, то vbs возвращает логин авторизации сервера, а vba логин другого пользователя.
Добрый день.
Возникла необходимость обновления файла Excel и отправлять эти данные по почте. Во время реализации этой задачи сложилась следующая ситуация.
При запуске VB скрипта с сервера
DECLARE @cmd varchar(256) SET @cmd = 'E:\1\refresh.vbs' exec master..xp_cmdshell @cmd
Скрипт нормально запускается под "правильным" пользователем, но реализованный запуск екселя внутри скрипта открывается под "рандомным активным пользователем" из-за чего скрипт вылетает(повисает на ошибках екселя).
[vba]
Код
Set app = CreateObject("Excel.Application") app.Visible = false app.DisplayAlerts = false app.Workbooks.Open ("E:\1\Шаблон.xls") app.Run "Module1.main" app.Workbooks("Шаблон.xls").Saveas ("E:\1\trash_shablon\ШАБЛОН " & Date & ".xls") app.Workbooks.Close app.Quit Set app=nothing
[/vba]
Можно ли как-то исправить такую проблему или возможно ли вызывать "CreateObject("Excel.Application")" под определенным пользователем?
Так же для проверки был написан скрипт, чтобы убедиться в правильности логина.
Sub test() Dim UserName As String Dim WshNetwork As Object Set WshNetwork = CreateObject("WScript.Network") UserName = WshNetwork.UserName
Cells(1, 1) = UserName
End Sub
[/vba]
При запуске в ручную скрипт и макрос возращают логин запустившего, но если запустить с сервера, то vbs возвращает логин авторизации сервера, а vba логин другого пользователя.Saliaz
Сообщение отредактировал Saliaz - Среда, 08.07.2015, 12:34
А если шелл из скуля запустить от имени нужного пользователя? То есть не надеяться на "автозапуск по расширению", а прописать сразу в @cmd полный вызов, по типу: [vba]
[/vba] Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....
А если шелл из скуля запустить от имени нужного пользователя? То есть не надеяться на "автозапуск по расширению", а прописать сразу в @cmd полный вызов, по типу: [vba]
[/vba] Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....AndreTM
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....
Учетные записи у нас с обязательной авторизацией...
Протестировав данный вариант на паре машин, получилось так, что скрипт запускается под указанной учеткой, а вот ексель запускается все равно под учетной записью запустившего.
Но тут одна проблема - если у вас коннект к sql-серверу работает через авторизацию sql-сервра, а не windows/AD (т.е. на сервер-хосту неизвестна windows-учётка нужного пользователя) - то скрипту просто не от кого аутентифицироваться....
Учетные записи у нас с обязательной авторизацией...
Протестировав данный вариант на паре машин, получилось так, что скрипт запускается под указанной учеткой, а вот ексель запускается все равно под учетной записью запустившего.Saliaz
Кстати, как для этой команды указать пароль, а то запрос на сервере завершается с сообщением о запросе пароля?
А так же выдает ошибку "E:\1\refresh.xls не является приложением Win32." [moder]Не нужно цитировать весь пост - это нарушение правил форума.[/moder]
Кстати, как для этой команды указать пароль, а то запрос на сервере завершается с сообщением о запросе пароля?
А так же выдает ошибку "E:\1\refresh.xls не является приложением Win32." [moder]Не нужно цитировать весь пост - это нарушение правил форума.[/moder]Saliaz
Сообщение отредактировал Manyasha - Четверг, 09.07.2015, 14:14
А, да... Зачем нам вообще RunAs в последнем случае? Ведь если не будет промежуточного вызова через WSH - то и запустим мы всего один инстанс Excel.Application (а потом нужный файл для обработки откроется уже в нём, через .Open). так что просто вызывайте [vba]
Код
SET @cmd = 'E:\1\refresh.xls'
[/vba]
А, да... Зачем нам вообще RunAs в последнем случае? Ведь если не будет промежуточного вызова через WSH - то и запустим мы всего один инстанс Excel.Application (а потом нужный файл для обработки откроется уже в нём, через .Open). так что просто вызывайте [vba]