![]() |
Скрипт корректно работает интерактивно, но нет данных при запуске через планировщик
Привет, коллеги!
Помогите разобраться, пожалуйста. Есть скрипт, который задействует модуль ImportExcel. Когда я запускаю его интерактивно, всё работает прекрасно, данные извлекаются из таблички, подсчитываются и высылаются на почту. Например, данные: 20 яблок 8 груш 3 бананов Когда я сую этот скрипт в планировщик, данные, которые должен делать модуль, отсутствуют. Письмо приходит (т. е., сам скрипт работает), но там 0 яблок 0 груш 0 бананов Задача в планировщике создана под той же самой учёткой, выполнять под наивысшими правами, вне зависимости от регистрации пользователя. Модуль лежит уже в четырёх местах: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules\ImportExcel C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ImportExcel C:\Program Files\WindowsPowerShell\Modules\ImportExcel C:\Program Files (x86)\WindowsPowerShell\Modules\ImportExcel Строка запуска в планировщике: powershell.exe c:\scripts\script_report.ps1 -executionpolicy bypass Явно, что при неинтерактивном выполнении модуль не работает. Почему? |
Попробуй написать тестовую заглушку с транскрипцией всего вывода в файл и там посмотришь на ошибки если вдруг они есть.
Нечто вроде такого планировщиком запусти: Код:
Start-Transcript -Path C:\templog.log -Force -Append |
Спасибо за способ логирования, я, честно говоря, и позабыл о нём.
Вот вывод ошибки: Код:
Транскрибирование запущено, выходной файл C:\temp\templog.log |
А какая часть ругается ошибкой? Import-Module или сам командлет?
Если второе то тут либо спрашивать у разработчика нюансы реализации либо самому код ковырять. И диск Е - локальный или сетевой? Что будет если открываемый файл положить в корень С и убрать пробелы\спец.символы\кириллицу из пути? И\или как-нибудь задать ему гарантированно доступный рабочий каталог. |
Сам командлет, диск локальный.
Больше того - у меня был старый код модуля для конвертирования xls в csv: Код:
Function ExportWSToCSV ($excelFileName, $csvLoc) { Идиотизм в том, что Powershell отлично работает с .xlsx вообще без Экселя через .NET, но исходный файл именно .xls, и его надо сначала преобразовать во что-то человеческое. Вот, нашёл ещё одну тему на другом форуме, где точно такая же ситуация: http://www.cyberforum.ru/powershell/thread2326375.html |
Ну как вариант - можно поизвращаться вот так https://stackoverflow.com/questions/...xcel-installed
|
Завтра попробую, отпишу. Сегодня сил уже нет.
Спасибо! |
Цитата:
|
Iska, модуль ImportExcel - https://www.powershellgallery.com/packages/ImportExcel
Обнаружил, что в составе Офиса есть файл excelcnv.exe, в результате задача решилась так: Код:
& "C:\Program Files (x86)\microsoft office\Office16\excelcnv.exe" -oice "$xls" "$($xls.FullName -replace '.xls','.xlsx')"
|
DJ Mogarych, спасибо, ясно. Если я правильно понимаю код, он работает только с новым форматом Рабочих книг, с 2007+. Ну, хотя бы и так.
|
Да, именно поэтому я и заморачивался с конвертацией.
|
Кстати недавно решал похожую в каком-то смысле задачу с чтением и редактированием xlsx файла без установленного экселя в принципе. Помог модуль PSExcel.
Скрытый текст
Код:
$Excel = New-Excel -Path $xlpath |
Цитата:
|
Время: 14:42. |
Время: 14:42.
© OSzone.net 2001-