Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41

Запуск таски из виндового с шедулера с максимальными правами

30.10.2017, 19:55. Показов 5093. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.

Возникла следующая проблема.

Есть cmd-файл на виндовом сервере, который запускает процесс загрузки данных в некоторую систему. В конце процесса необходимо пересохранить и переименовать некоторый эксель-файл (лог процесса загрузки данных). Если запускать батник с галкой "Run as administrator" все замечательно отрабатывает.

Однако предполагается, что процесс будет работать в автоматическом режиме по ночам, поэтому запускаю его из под виндового шедулера. В этом случае лог не переименовывается и не пересохраняется (видимо, не хватает прав). Пробовал добавлять учетку, из под которой дергается cmd-шник, в группу админов - никакого эффекта. В свойствах таски поставил галку "Run with the highest privileges" - также никакого эффекта.

Подскажите, можно ли как-то решить данную проблему? Очень хотелось бы, чтобы при запуске процесса он еще и не требовал ввода админского пароля.

Заранее благодарен за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2017, 19:55
Ответы с готовыми решениями:

Запуск процесса с правами пользователя (запускающая программа работает с правами администратора)
Здравствуйте. Требуется выполнить действие, описанное в заголовке. Читал тему...

Запуск батника с правами админа из под учетки с ограниченными правами
Здравствуйте. Есть батник. Так же есть учетка с ограниченными правами. Нужно что бы батник запускался с правами админа, т.е. без диалоговых...

Запуск в батнике - команды на запуск файла (из консоли с правами администратора)
Добрый день, форумчане. Помогите решить вопрос. Существует файл, которого нужно часто запускать с определенной командой - из...

24
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
30.10.2017, 22:37
Цитата Сообщение от RamblingBeard Посмотреть сообщение
из под виндового шедулера
тогда непонятно, что мешает использовать его возможности:
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
31.10.2017, 09:44  [ТС]
alpap,

я уже писал выше, что это по прежнему не дает никакого эффекта.

Пересохранение и переименование экселевского лога осуществляется кастомным vbs-скриптом, который запускается из под утилиты cscript.exe. Учетка, которая запускает сам процесс входит в группу админов; у этой группы есть только права на чтение и исполнение файла cscript.exe. Может быть, нужно выдать полные права (full control) на файл?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.10.2017, 13:28
Цитата Сообщение от RamblingBeard Посмотреть сообщение
некоторый эксель-файл
до ваших операций где он находится.

Цитата Сообщение от RamblingBeard Посмотреть сообщение
Если запускать батник
его код сюда

Цитата Сообщение от RamblingBeard Посмотреть сообщение
запускаю его из под виндового шедулера
что именно из этого [Есть cmd-файл, vbs-скриптом, утилиты cscript.exe] запускается планировщиком.

Вот полные права на файл, если админ
Windows Batch file
1
takeown /f "Путь к директории" && icacls "Путь к директории" /grant Administrators:F /t
или конкретный пользователь под админом
Windows Batch file
1
cmd /c takeown /f "Путь к директории" /r /d y && icacls "Путь к директории" /grant:r "Юзер":(OI)(CI)F /t
1
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
31.10.2017, 16:30  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
до ваших операций где он находится.
Файл перемещается из некоторой директории по длинному пути (системная директория, куда процесс кидает лог) в директорию с логами, которую я создал.

Цитата Сообщение от alpap Посмотреть сообщение
его код сюда
Windows Batch file
1
call D:\.....\sas.exe -sysin D:\.....\import_data.sas -nolog
Цитата Сообщение от alpap Посмотреть сообщение
что именно из этого [Есть cmd-файл, vbs-скриптом, утилиты cscript.exe] запускается планировщиком.
Планировщик запускает как раз cmd-шник, код которого я привел выше.

Для пересохранения эксельника из скрипта sas запускаю команду, которая вызывает cscript.exe и свой кастомный vbs-скрипт. Он (кастомный скрипт) и пересохраняет эксельник. При запуске руками все работает отлично.

Добавлено через 12 минут
alpap,

код запуска кастомного vbs-скрипта вот такой:

Windows Batch file
1
2
x "C:\Windows\SysWOW64\cscript.exe D:\....\convertXlsToXlsx.vbs 
20171031-1129-results-CustomObject3.xls D:\...\logs\ 2017-10-31__10.28.38 AM & exit";
Здесь:
x - это команда языка sas base, позволяющая из сессии sas запускать команды командной строки.
20171031-1129-results-CustomObject3.xls - первоначальное имя лога, который нужно пересохранить, передаю параметром в скрипт convertXlsToXlsx.vbs.

D:\...\logs\ - директория с логами, где лежит исходный файл лога, тоже параметр.

2017-10-31__10.28.38 AM - датавременная метка, пойдет в новое имя лога, тоже параметр.

Подскажите, как мне в эту команду вставить назначение прав, которое вы привели?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.10.2017, 16:51
Расшифруйте:
call D:\.....\sas.exe -sysin D:\.....\import_data.sas -nolog
почему и зачем call

запуск строки в таком коде, что показывает?
Windows Batch file
1
2
3
@echo on
"D:\.....\sas.exe" -sysin "D:\.....\import_data.sas" -nolog
pause
Добавлено через 6 минут
Цитата Сообщение от RamblingBeard Посмотреть сообщение
в эту команду вставить назначение прав
не в эту команду. Права даются кому-то ("Юзер" - выше в примере) на разрешение чего-то ("Путь к директории" - выше в примере)

Добавлено через 10 минут
И вообще, в планировщике лучше запускать так:
- в действиях указываете путь к файлу bat (cmd), указываете (Добавить аргументы) путь к папке из которой будете запускать какой-то файл (программу), эта папка соответственно будет первым параметром bat (cmd)
- в коде самого bat (cmd) пишите первой строкой:
Windows Batch file
1
cd /d "%~dp1"
все, вы находитесь в папке с нужной программой и в коде уже пишите все проще:
Windows Batch file
1
"proga.exe" аргументы "параметр1" "параметр2" ...
Добавлено через 4 минуты

Не по теме:

и сейчас однозначно (и правильно сделают) вам посоветуют использовать только vbs, а не варить кашу из топора.

0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
31.10.2017, 17:28  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
Расшифруйте:
call D:\.....\sas.exe -sysin D:\.....\import_data.sas -nolog
почему и зачем call
call я пишу по привычке, т.к. всегда так делал. sysin - это опция sas для старта процесса в режиме батча.

При запуске руками без call все работает отлично даже без галки "Run as administrator". А вот при запуске из под шедулера процесс import_data.sas стартует, но штатный процесс (внутренний процесс системы), который собственно грузит данные и создает лог, даже не запускается. Т.е. лог даже не формируется. В случае, если call стоит, процесс нормально запускается из под шедулера, формируется лог, но вот переименовать и пересохранить его прав уже почему-то не хватает.

Правильно я понимаю, что команду назначения прав пользователю к нужной директории можно прописать в самом начале батника, перед запуском процесса? Пользователь должен быть указан с доменом или нет?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.10.2017, 18:26
Цитата Сообщение от RamblingBeard Посмотреть сообщение
В случае, если call стоит
может быть чревато

Цитата Сообщение от RamblingBeard Посмотреть сообщение
Правильно я понимаю,
да

Цитата Сообщение от RamblingBeard Посмотреть сообщение
или нет?
нет
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
31.10.2017, 21:38  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
Вот полные права на файл, если админ
Правильно ли я понимаю, что этот вариант подойдет, если учетка - локальный администратор (входит в группу администраторов на сервере)?

Цитата Сообщение от alpap Посмотреть сообщение
может быть чревато
чревато чем?

И сразу извиняюсь за глупый вопрос - можете прокомментировать ваш код с назначением прав. Просто я с cmd работаю очень редко и мало, а с правами вообще никогда не работал. Буду очень благодарен.

Добавлено через 24 минуты
Вот текущий код батника, который стоит в шедулере:
Windows Batch file
1
2
/c takeown /f "C:\Windows\SysWOW64\cscript.exe" /r /d y && icacls "C:\Windows\SysWOW64\cscript.exe" /grant:r "sasinst":(OI)(CI)F /t
D:\....\sas.exe -sysin D:\....\import_data.sas -nolog
sasinst - локальный админ, входит в группу админов.

Права раздались корректно, именно на файл cscript.exe.
Процесс запускается, экселевский лог формируется, падает в мою директорию с логами, но по прежнему отказывается пересохраняться и не переименовывается.

Добавлено через 43 минуты
То, что я сказал выше относится к запуску батника из под шедулера - права назначились, но ожидаемого результата нет. Странно то, что если запустить этот же батник руками пользователем sasinst, то все замечательно работает. А из под шедулера - не хочет работать...

Добавлено через 49 минут
Пробовал давать гранты для всех админов на всю директорию SysWOW64 - результат тот же.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 02:48
Цитата Сообщение от RamblingBeard Посмотреть сообщение
А из под шедулера - не хочет работать
сделайте как в конце п6 описано.

Добавлено через 6 минут
Windows Batch file
1
2
3
4
5
@echo on
cd /d "%~dp1"
cmd /c takeown /f "C:\Windows\SysWOW64\cscript.exe" /r /d y && icacls "C:\Windows\SysWOW64\cscript.exe" /grant:r "sasinst":(OI)(CI)F /t
sas.exe -sysin import_data.sas -nolog
pause
в шедулере
путь: Диск:\папка\файл.bat
аргумент(параметр): D:\....
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
01.11.2017, 11:01  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
сделайте как в конце п6 описано.
Простите, не понял, что вы имеете ввиду под п6.

Цитата Сообщение от alpap Посмотреть сообщение
в шедулере
путь: Диск:\папка\файл.bat
аргумент(параметр): D:\....
Правильно я понимаю, что в батник можно передать несколько параметров таким образом? Дело в том, что sas.exe лежит в одной директории, import_data.sas в другой, сам батник лежит в третьей директории, ну и так далее...Многоточия я поставил и там и там просто для сокращения пути.

Добавлено через 1 час 47 минут
Цитата Сообщение от alpap Посмотреть сообщение
и сейчас однозначно (и правильно сделают) вам посоветуют использовать только vbs, а не варить кашу из топора.
Я не против использовать vbs, но для этого мне нужно переделывать всю архитектуру процесса (кто кого вызывает и кто что делает), а для меня это гораздо сложнее чем сделать вот такую кашу из топора) К тому же, я vbs знаю на том же уровне, что и cmd; написал на нем за всю жизнь всего два простых скрипта конкретно для этой задачи.

Добавлено через 1 час 46 минут
alpap,

т.е. sas.exe и import_data.sas лежат в разных директориях. Положить их в одну директорию невозможно, т.к. sas.exe лежит там, куда был установлена сама система sas, менять расположение экзешника нельзя. Экзешник нужен для запуска сессии sas.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 13:54
Должно прекрасно отработать это без всяких там ухищрений. Зачем вообще эта вставка на vbs, к чему sas.exe
если надо просто копировать куда-то файл и переименовать его - так?
если не совсем - точно растолкуйте что должно с файлом произойти до момента, указанного строкой выше.

name.bat
Windows Batch file
1
2
3
4
@echo off
cd /d "%~dp1"
copy "имя файла, который надо переименовать и переместить.расширение" "Диск:\папка\новое имя файла.расширение "
exit
в шедулере
путь: Диск:\папка\name.bat
аргумент(параметр): Диск:\папка(в которой файл что надо переименовать)
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
01.11.2017, 14:29  [ТС]
alpap,

попытаюсь более подробно описать весь процесс.

Есть кастомный скрипт (import_data.sas), предназначенный для загрузки данных из внешней системы в целевую систему (ETL-процесс). Он устроен следующим образом.

Вначале запускается кастомная процедура Init для инициализации различных системных переменных, нужных для работы процесса (всякие пути, флаги, доступ к базе данных целевой системы и так далее). Эта процедура а-ля основной конфиг.

Далее процесс import_data.sas из директории Дир1 берет эксель-файл, который туда выгружается из внешней системы. Дополняет его определенной информацией и кладет в ту же директорию Дир1.

Далее изнутри процесса import_data.sas запускается другой кастомный процесс (Проц1), который в свою очередь дергает штатную процедуру (Проц2; эта процедура синхронизирована с целевой системой, куда грузятся данные). Процедуре Проц2 "скармливается" эксельник, лежащий в директории Дир1. После загрузки данных процедура Проц2 кладет в системную директорию Дир2 лог-файл процесса загрузки (из-за которого весь сыр-бор). Далее внутри процесса Проц1 происходит копирование этого лога в мою директорию с логами. Затем (в силу определенных причин, не буду вдаваться в подробности) мне нужно пересохранить, а потом переименовать этот лог-файл. Пересохранение я делаю с помощью своего кастомного vbs-скрипта, который лежит вместе с батником в директории Дир3.

***

Чтобы запустить процесс import_data.sas из батника мне нужно сначала открыть сессию sas (запустив sas.exe), а потом в этой сессии стартануть процесс import_data.sas.

Добавлено через 7 минут
Важный момент. Пересохранение экселя связано с тем, что мне нужно изменить его расширение с .xls на .xlsx.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 14:55
Цитата Сообщение от RamblingBeard Посмотреть сообщение
Затем
на этом этапе в конкретном месте есть конкретный файл и ничто не мешает использовать код из #12
Цитата Сообщение от RamblingBeard Посмотреть сообщение
с .xls на .xlsx
я не уверен что это простая операция, может и ошибаюсь, но на мой взгляд это файлу doc поменять расширение на zip.
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
01.11.2017, 15:19  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
на этом этапе в конкретном месте есть конкретный файл и ничто не мешает использовать код из #12
Правильно я понимаю, что вы предлагаете передать путь к логу из шедулера в батник и далее в скрипт sas?

Извиняюсь за глупый вопрос. Подскажите в чем будет различие этого варианта (ваше сообщение #12) от кода, который я привожу в сообщении #5? В моем варианте путь к файлу указан в виде параметра для скрипта convertXlsToXlsx.vbs.

Цитата Сообщение от alpap Посмотреть сообщение
я не уверен что это простая операция, может и ошибаюсь, но на мой взгляд это файлу doc поменять расширение на zip.
Операция действительно не сложная и в коде занимает две не большие строки. Весь скрипт строк на 170-180.

Добавлено через 8 минут
Как я понял вы предлагаете следующее.

В параметре у таски в шедулере указать путь к файлу (экселевскому логу).
А уже в коде саса перед вызовом скрипта convertXlsToXlsx.vbs я пропишу:

Windows Batch file
1
x "cd /d "%~dp1"";
Добавлено через 1 минуту
Вот только я не знаю сработает ли конструкция %~dp1, если я пропишу команду внутри саса...
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 15:35
Цитата Сообщение от RamblingBeard Посмотреть сообщение
и далее в скрипт sas?
Цитата Сообщение от RamblingBeard Посмотреть сообщение
вы предлагаете следующее
Еще раз поясню
У вас есть на каком-то этапе в КОНКРЕТНОМ месте КОНКРЕТНЫЙ файл, не важно что происходило с ним до этого, он ЕСТЬ.
составляем name.bat с кодом (move - переместить, copy - копировать):
Windows Batch file
1
2
3
4
@echo off
cd /d "%~dp1"
move "20171031-1129-results-CustomObject3.xls" "Диск:\папка\2017-10-31__10.28.38 AM.xlsx"
exit
в шедулере: Действия-Создать-Программа или сценарий: Диск:\папка\name.bat
Добавить аргументы (необязательно): Диск:\папка (в которой лежит 20171031-1129-results-CustomObject3.xls)

ПОЧЕМУ это должно бы не работать или чем это не устраивает

Не по теме:

Задачи до..., выполняются как выполнялись в своих vbs, sas, bat и возможно отдельной задачей шедулера

0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
01.11.2017, 15:38  [ТС]
alpap,

можно ли как-то получить содержимое %~dp1 внутри батника? Потому что я не могу эту конструкцию напрямую передать в sas перед запуском vbs-скрипта. SAS не распознает ее.

Т.е., получить значение %~dp1 в переименную и эту переменную по идее можно передать внутрь скрипта sas.

Добавлено через 3 минуты
alpap,

вопрос по вашему последнему сообщению - командой move можно сделать такую операцию как изменение расширения с xls на xlsx?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 15:48
Зайдите лучше на vbs со своей задачей, пусть полностью на нем кто-то сделает

Цитата Сообщение от RamblingBeard Посмотреть сообщение
по идее можно передать
нет
придется делать запуск sas.exe "%~dp1" из батника

Добавлено через 59 секунд
Цитата Сообщение от RamblingBeard Посмотреть сообщение
изменение расширения с xls на xlsx
да, также как командой ren или copy

Добавлено через 5 минут
Цитата Сообщение от RamblingBeard Посмотреть сообщение
изменение расширения
что это в вашем понимании? Для программы которая откроет и то и другое не будет иметь особого значения, но это не преобразование, а скажем снятие ограничения в каком-то случае или удобство, но никак не полноценное превращение в файл с нужным расширением. Например у файла bat можно поменять расширение на log, он легко будет открываться текстовым редактором и не только, но перестанет быть исполняемым файлом - понимаете к чему я?
0
3 / 3 / 0
Регистрация: 08.03.2016
Сообщений: 41
01.11.2017, 15:49  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
да, также как командой ren или copy
Файл действительно переименовывается, однако открыть его невозможно. Пишет ошибку, что формат файла или расширение файла некорректно.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.11.2017, 15:52
Цитата Сообщение от RamblingBeard Посмотреть сообщение
Пишет ошибку
что и требовалось доказать

Добавлено через 1 минуту
Перемещайтесь на vbs - там помогут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2017, 15:52
Помогаю со студенческими работами здесь

Запуск с правами администратора
Доброго времени суток уважаемое комюнити. Возник вопрос: Есть программа написанная на втором фреймворке. Программа работает с...

Запуск с правами администратора
Как программу, написанную в Delphi 2010, запустить с правами администратора? В программе идёт считывания значений из каталога реестра...

Запуск с правами администратора
нужно запустить мою программу с права администратора как это сделать? пробывал создать файл формата .rs c текстом 1 24...

Запуск ПО с правами администратора в домене
Имеется домен, в нем пользователи, как дать права администратора на одну программу пользователю? чтобы для обновления не приходилось...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru