Войти

Показать полную графическую версию : [решено] Скрипт запуска программ по времяни


Страниц : 1 [2] 3

megaloman
18-07-2017, 12:49
p.igor.kin, ...в скрипте сделали проверку на ошибки ... Нельзя ли это убрать? ... если что то не так скрипт просто запустился и молча закрылся. » Можно, но, ИМХО, не нужно для предметного разбирательства неприятности. Можно закомментировать строку символом ': ' LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + PrgName + Msg + vbCrLf + CStr(TBeg) + " " + CStr(TEnd) + " " + CStr(Time()) + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 6, "Программа не запускается", 16) Но я бы предложил иное: это сообщение автоматически закрывается, я перестарался, поставил время ожидания 3600 сек (смотрите в конец Вашей строки), лучше поставьте мЕньшее время (в приведенной строке я поставил 6 сек). Для разбирательства в ручном режиме будет полезно.И ещё я заметил что скрипт постоянно висит в диспетчере задач. Тоесть он постоянно работает. Можно как нибудь сделать что бы после запуска нужной программы скрипт закрывал сам себя. »Это не совсем так. Скрипт запускает программу, а после этого, если всё благополучно, завершает работу. Исключение: когда есть запрос на ответ (например, сообщение об ошибке) он будет ждать ответа.
А вообще-то, раз пошла такая пьянка, я бы предложил вести лог-файл работы скрипта. И я, наверное, этим озабочусь.

p.igor.kin
18-07-2017, 12:55
Уважаемый megaloman а может быть вы подскажете как прикрутить Ваш скрипт что бы он работал при загрузке компьютера а не при входе пользователя в систему. Основная задача стоит в этом. А я с 9 утра бьюсь с этой задачей и ни чего не выходит(

megaloman
18-07-2017, 13:12
p.igor.kin, Сделаю лог-файл, попробую прикрутить, без информации о том, что происходит, соваться нечего.

p.igor.kin
18-07-2017, 13:16
огромное спасибо будем ждать

megaloman
18-07-2017, 18:02
p.igor.kin, ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
"C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")

'LogFile = WScript.ScriptFullName + ".log" ' Если лог-файл пишется рядом со скриптом с именем скрипта
LogFile = "Z:\яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя.log" ' Прописать полный путь к лог-файлу

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

Call WriteLogFile(LogFile, "+++", "Скрипт запущен")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

On Error Resume Next
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
On Error Resume Next
If TBeg <= Time() And Time() <= TEnd Then
WShell.CurrentDirectory = FSO.GetFile(PrgName).ParentFolder
LL = WShell.Run("""" + PrgName + """", 7, False)
ErrMsg = PrgName + " Код ошибки " + CStr(Err.Number) + " " + Err.Description
If Err.Number <> 0 Then
Call WriteLogFile(LogFile, "!!!", ErrMsg)
Msg = ""
If Not FSO.FileExists(PrgName) Then
Msg = vbCrLf + "Файл не найден" + vbCrLf
Call WriteLogFile(LogFile, "???", PrgName + " Файл не найден")
End If
' LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + PrgName + Msg + vbCrLf + CStr(TBeg) + " " + CStr(TEnd) + " " + CStr(Time()) + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 6, "Программа не запускается", 16)
Else
Call WriteLogFile(LogFile, "+++", PrgName + " Запущено")
End If

End If
Next
On Error GoTo 0
Call WriteLogFile(LogFile, "===", "Скрипт завершается")

Sub WriteLogFile(FName, Pref, Mess)
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set FOut = FSO.OpenTextFile(FName, 8, True)
FOut.WriteLine Pref + " " + CStr(Now()) + " " + Mess
FOut.Close
' MsgBox Pref + " " + CStr(Now()) + " " + Mess
On Error GoTo 0
End Sub
Возможно, лог-файл писаться не будет, если системе не будет хватать прав на запись в указанном месте.
Попробуйте этот скрипт. Посмотрите, создаётся ли лог-файл.
У меня скрипт благополучно прикрутился в назначенные задания при запуске - смотрю по логу скрипта. Но у меня комп не в домене. Если у Вас проблемы - ИМХО, где-то что-то с доступом.
У меня Win 7/32

p.igor.kin
19-07-2017, 08:21
У меня компьютер в домене на win 7 x 64

Сделал задание в планировщике как у Вас на скрине. Запуск поставил учетная запись "СИСТЕМА" галка стоит на выполнять вне зависимости от регистрации пользователя
Запустил вручную из планировщика создался фал Log в котором написано

+++ 19.07.2017 8:17:50 Скрипт запущен

Но программа не запустилась. В планировщике стоит статус "это задание выполняется в данное время"
Остановил задание в ручную в логе появилась запись

!!! 19.07.2017 8:20:51 C:\Program Files\cpustats\dau\cpustats.exe Код ошибки -2147023673
=== 19.07.2017 8:20:51 Скрипт завершается

Если я правильно понимаю то это нет доступа.. Но без скрипта все работает. Расскажу как у меня все настроено сейчас может это как то поможет

1) в планировщике создано задание
название: cpustats-dau
триггер: при входе любого пользователя
действия "C:\Program Files\cpustats\dau\cpustats.exe"
При выполнении задания используется учетная запись "СИСТЕМА" галка стоит на выполнять вне зависимости от регистрации пользователя

2) в планировщике создано задание
название: cpustats-night
триггер: Ежедневно в 21:05
действия "C:\Program Files\cpustats\night\cpustats.exe"
При выполнении задания используется учетная запись "СИСТЕМА" галка стоит на выполнять вне зависимости от регистрации пользователя

Вот так у меня сейчас все работает, но если компьютер включается после 21:05 то увы программа уже не запускается, а если он включается до 21 и пользователь входит в систему то запускается "C:\Program Files\cpustats\dau\cpustats.exe" после чего в 21:05 запускается ещё и "C:\Program Files\cpustats\night\cpustats.exe". Собственно по этому и хотелось бы сделать 1 задание со скриптом что бы скрипт сам все делал.

Создал ещё раз задание в планировщике но запустил его от имени учетной записи пользователя домена, а не от "СИСТЕМА"
галка стоит на выполнять вне зависимости от регистрации пользователя

+++ 19.07.2017 8:35:30 Скрипт запущен
+++ 19.07.2017 8:35:31 C:\Program Files\cpustats\dau\cpustats.exe Запущено
=== 19.07.2017 8:35:31 Скрипт завершается

P/s все бы ни чего но когда создаешь задание через GPO запуск от имени пользователя можно указать только "СИСТЕМА" ибо логины и пароли у всех пользователей разные. Да и странно ещё то что сейчас программы запускаются именно от пользователя "СИСТЕМА", а через скрипт не хотят:(

megaloman
19-07-2017, 08:43
p.igor.kin, Итак: Скрипт в задании запускается. Проблема с запуском программы. Попробуем в этом убедиться. Закомментируйте запуск программы, то есть строку:' LL = WShell.Run("""" + PrgName + """", 7, False) Что в лог-файле при запуске? От чьего имени создано задание на запуск?

p.igor.kin
19-07-2017, 08:46
Закомментировал строчку, Задание все так же от имени "СИСТЕМА"

в лог файле
+++ 19.07.2017 8:44:52 Скрипт запущен
+++ 19.07.2017 8:44:52 C:\Program Files\cpustats\dau\cpustats.exe Запущено
=== 19.07.2017 8:44:52 Скрипт завершается

Но на самом деле программа не запустилась!

megaloman
19-07-2017, 08:51
p.igor.kin, Естественно, программа не запустилась, коль мы её и не запускали. :)
Но убедились, что логика скрипта работает верно. У меня нет мыслей, почему не отрабатывает Run, похоже, для запуска программы необходимо ответить на какой-то запрос, который Вы не можете видеть, так как задание запущено от другого пользователя при запуске системы

p.igor.kin
19-07-2017, 08:53
У меня нет мыслей, почему не отрабатывает Run »

Печально. думаете придется отказаться от идеи реализовать данную задачу скриптом и оставить все как есть?

P.s запустил задачу от имени Администратора домена domain\администратор

+++ 19.07.2017 8:54:52 Скрипт запущен
!!! 19.07.2017 8:55:07 C:\Program Files\cpustats\dau\cpustats.exe Код ошибки -2147023673
=== 19.07.2017 8:55:07 Скрипт завершается

Очень странно так как данный пользователь обладает правами равносильными пользователю ПК

p.igor.kin
19-07-2017, 09:21
Может где-то в безопасности есть ограничение на запуск программ скриптами? »
Сомневаюсь
(Кстати, Вы убрали комментарий от Run?) »
Да убрал
А напрямую в задании программа без скрипта запускается? »
Да напрямую все запускается. от имени "СИСТЕМА"

http://forum.oszone.net/post-2752418-26.html - вот тут я описал как у меня настроено сейчас.

Iska
19-07-2017, 09:31
p.igor.kin, давайте ссылки на Ваши cpustats.exe и прочее, дабы коллега megaloman мог попробовать воспроизвести Ваши действия.

p.igor.kin
19-07-2017, 09:40
p.igor.kin, давайте ссылки на Ваши cpustats.exe и прочее, дабы коллега megaloman мог попробовать воспроизвести Ваши действия. »

Думаю особого смысла в этом нет так как у меня доменная сеть и win 64 а у нашего коллеги megaloman нет домена и win x32

Iska
19-07-2017, 10:39
Можно думать, а можно проверить. Дело Ваше.

megaloman
19-07-2017, 15:31
p.igor.kin, Можно думать, а можно проверить. Дело Ваше. » ИМХО, решение надо искать в политике безопасности. Давайте попробуем заменить Вашу программу чем-нибудь простым и стандартным, например, калькулятором. ProgStart = Array("C:\Windows\System32\calc.exe", "08:00:00", "18:00:00", _
"C:\Windows\System32\calc.exe", "20:00:00", "23:59:59", _
"C:\Windows\System32\calc.exe", "00:00:00", "06:00:00")
Единственное, он, наверное, у Вас по другому пути. Он запускается? Я подозреваю, что нет. Но если, паче чаяния, он запустится, увидите в лог-файле нормальное сообщение о окончании скрипта и в диспетчере - calc.exe. По крайней мере будет ясно, куда копать.@Echo Off

Set "Prog=C:\Program Files\cpustats\dau\cpustats.exe"

Set "LogFile=Z:\zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.log"

Call :Starting "%Prog%"

GoTo :Eof

:Starting
>>"%LogFile%" (Echo: &Echo +++ %Date% %Time% %~dpnx0 Selected %1)


If Exist %1 (
Pushd "%~dp1"
>>"%LogFile%" Echo +++ %Date% %Time% %1 Try start
Start " " %1 || >>"%LogFile%" Echo --- %Date% %Time% %1 Start not success
Popd
) Else (
>>"%LogFile%" Echo ??? %Date% %Time% %1 Not Found
)
>>"%LogFile%" Echo === %Date% %Time% %~dpnx0 Exit
GoTo :Eof
Попробуйте создать задание на этот батник. Если получится, сообщите, пожалуйста, формат времени в системе. Внутренний голос мне шепчет, что это будет с тем же результатом. ИМХО, надо смотреть настройку безопасности@Echo Off

Set /A N=3

Set "Prg1=C:\Program Files\cpustats\dau\cpustats.exe"
Set "Tb_1=08:00:00"
Set "Te_1=18:00:00"

Set "Prg2=C:\Program Files\cpustats\night\cpustats.exe"
Set "Tb_2=20:00:00"
Set "Te_2=24:00:00"

Set "Prg3=C:\Program Files\cpustats\night\cpustats.exe"
Set "Tb_3=00:00:00"
Set "Te_3=06:00:00"

rem Set "LogFile=Z:\zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.log"
Set "LogFile=%~dpnx0.log"

Set "Ttime=%Time:~0,-3%"
Call :ReTime "Ttime"

>>"%LogFile%" (Echo: &Echo +++ %Date% %Time% %~dpnx0 Started)

FOR /L %%i IN (1,1,%N%) DO Call :Program "Prg%%i" "Tb_%%i" "Te_%%i" %Ttime%

>>"%LogFile%" Echo === %Date% %Time% %~dpnx0 Exit

GoTo :Eof

:Program
Call Set "Prg=%%%~1%%"
Call Set "Tb=%%%~2%%"
Call Set "Te=%%%~3%%"
Call :ReTime "Tb"
Call :ReTime "Te"
rem >>"%LogFile%" Echo !!! Testing If %Tb% LEQ %4 If %4 LSS %Te% Call :Starting "%Prg%"
If %Tb% LEQ %4 If %4 LSS %Te% Call :Starting "%Prg%"
GoTo :Eof

:ReTime
Call Set "@Ident=%%%~1%%"
Set "@Ident=%@Ident: =0%"
Set "@Ident=1%@Ident::=%"
Call Set /A %~1=%@Ident%
GoTo :Eof

:Starting
>>"%LogFile%" Echo +++ %Date% %Time% %1 Selected

If Exist %1 (
Pushd "%~dp1"
>>"%LogFile%" Echo +++ %Date% %Time% %1 Try start
Start " " %1 || >>"%LogFile%" Echo --- %Date% %Time% %1 Start not success
Popd
) Else (
>>"%LogFile%" Echo ??? %Date% %Time% %1 Not Found
)
GoTo :Eof

p.igor.kin
20-07-2017, 16:13
Прошу прощения за долгий ответ взял скрипт "А тут уже навязал" подставил свою программу назвал как start.bat запустил и получил:

+++ 20.07.2017 16:11:57,88 C:\Program Files\cpustats\start.bat Started
=== 20.07.2017 16:11:57,94 C:\Program Files\cpustats\start.bat Exit

Если сохраняю как start.vbs то получаю ошибку...

Сейчас буду проверять запуск предыдущего скрипта на калькуляторе......

Проверил

при коде:
ProgStart = Array("C:\Windows\System32\calc.exe", "08:00:00", "18:00:00", _
"C:\Windows\System32\calc.exe", "20:00:00", "23:59:59", _
"C:\Windows\System32\calc.exe", "00:00:00", "06:00:00")

+++ 20.07.2017 16:23:46 Скрипт запущен
+++ 20.07.2017 16:23:46 C:\Windows\System32\calc.exe Запущено
=== 20.07.2017 16:23:46 Скрипт завершается

и calc.exe висит в процессах

Посмотрел в свойствах файлов вкладка безопасность Там есть "система" и стоит полный доступ тоесть по сути файлы должны запускаться от имени система!

p.igor.kin
20-07-2017, 16:34
Вы свои программы и время прописали в батнике »
Да

Я Вас просил запустить предыдущий скрипт »

При запуске скрипта в ручную:
+++ 20.07.2017 16:31:53,62 C:\Program Files\cpustats\start.bat Selected "C:\Program Files\cpustats\dau\cpustats.exe"
+++ 20.07.2017 16:31:53,63 "C:\Program Files\cpustats\dau\cpustats.exe" Try start
=== 20.07.2017 16:31:53,63 C:\Program Files\cpustats\start.bat Exit

При запуске скрипта через планировщик от имени системы:
+++ 20.07.2017 16:33:07,62 C:\Program Files\cpustats\start.bat Selected "C:\Program Files\cpustats\dau\cpustats.exe"
+++ 20.07.2017 16:33:07,62 "C:\Program Files\cpustats\dau\cpustats.exe" Try start
=== 20.07.2017 16:33:07,67 C:\Program Files\cpustats\start.bat Exit

Время в системе не совсем понял вопроса? 16:34:)

megaloman
20-07-2017, 16:41
При запуске скрипта через планировщик от имени системы: »Какого скрипта? Тестового?Программа в диспетчере появилась?
Для отладки скрипта "Уже наваял" я вставил отладочную строку (см. выше, выделено красным). Что появилось в лог-файле?
В первой половине дня в каком виде выдаётся результат команды в командном окне
Echo "%Time%"

p.igor.kin
20-07-2017, 16:53
По порядку скрипт что ниже работает как надо... Программа в диспетчере появляется хоть при запуске в ручную, хоть при запуске через планировщик

@Echo Off

Set "Prog=C:\Program Files\cpustats\dau\cpustats.exe"

Set "LogFile=Z:\zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.log"

Call :Starting "%Prog%"

GoTo :Eof

:Starting
>>"%LogFile%" (Echo: &Echo +++ %Date% %Time% %~dpnx0 Selected %1)


If Exist %1 (
Pushd "%~dp1"
>>"%LogFile%" Echo +++ %Date% %Time% %1 Try start
Start " " %1 || >>"%LogFile%" Echo --- %Date% %Time% %1 Start not success
Popd
) Else (
>>"%LogFile%" Echo ??? %Date% %Time% %1 Not Found
)
>>"%LogFile%" Echo === %Date% %Time% %~dpnx0 Exit
GoTo :Eof

Дальше скрипт "А тут уже наваял" (ни чего не менял)

При запуске в ручную пишет в логе:
+++ 20.07.2017 16:51:00,36 C:\Program Files\cpustats\start.bat Started
!!! Testing If 1080000 LEQ 1165100 If 1165100 LSS 1160000 Call :Starting "C:\Program Files\7-Zip\7zG.exe"
!!! Testing If 1170000 LEQ 1165100 If 1165100 LSS 1240000 Call :Starting "C:\Program Files\WinRar\WinRar.exe"
!!! Testing If 1000000 LEQ 1165100 If 1165100 LSS 1060000 Call :Starting "C:\Program Files\WinRar\WinRar.exe"
=== 20.07.2017 16:51:00,42 C:\Program Files\cpustats\start.bat Exit

При запуске из планировщика пишет в логе:
+++ 20.07.2017 16:52:44,72 C:\Program Files\cpustats\start.bat Started
!!! Testing If 1080000 LEQ 1165244 If 1165244 LSS 1160000 Call :Starting "C:\Program Files\7-Zip\7zG.exe"
!!! Testing If 1170000 LEQ 1165244 If 1165244 LSS 1240000 Call :Starting "C:\Program Files\WinRar\WinRar.exe"
!!! Testing If 1000000 LEQ 1165244 If 1165244 LSS 1060000 Call :Starting "C:\Program Files\WinRar\WinRar.exe"
=== 20.07.2017 16:52:44,81 C:\Program Files\cpustats\start.bat Exit

результат Echo "%Time%" -->> "16:53:57,01" И если поменять время на 8 утра то Echo "%Time%"-->> " 8:54:57,29"

Дальше Если в Ваш старый скрипт вставить строчки (тесть заменить мои программы на калькулятор)
ProgStart = Array("C:\Windows\System32\calc.exe", "08:00:00", "18:00:00", _
"C:\Windows\System32\calc.exe", "20:00:00", "23:59:59", _
"C:\Windows\System32\calc.exe", "00:00:00", "06:00:00")
И запустить его через планировщик от имени "СИСТЕМА"
В логе появляется:
+++ 20.07.2017 16:23:46 Скрипт запущен
+++ 20.07.2017 16:23:46 C:\Windows\System32\calc.exe Запущено
=== 20.07.2017 16:23:46 Скрипт завершается

и calc.exe висит в процессах

megaloman
20-07-2017, 17:29
Дальше скрипт "А тут уже наваял" (ни чего не менял)
При запуске в ручную пишет в логе: »Вы не прописали свои программы и правильное время. Из лога следует, что в указанные временнЫе интервалы нет запускаемой задачи. Расшифрую, например:
!!! Testing If 1170000 LEQ 1165244 If 1165244 LSS 1240000
Перед числами 1 следует отбросить, итого получаем время. Условие, в переводе на понятный формат, получится:

текущее время 16:52:44
Если 17:00:00<=16:52:44 и Если 16:52:44<24:00:00 то есть, в мат виде
17:00:00<=16:52:44<24:00:00
- очевидно условие не выполняется
Так и по остальным интервалам
Задайте корректные интервалы.И запустить его через планировщик от имени "СИСТЕМА"
В логе появляется:
+++ 20.07.2017 16:23:46 Скрипт запущен
+++ 20.07.2017 16:23:46 C:\Windows\System32\calc.exe Запущено
=== 20.07.2017 16:23:46 Скрипт завершается
и calc.exe висит в процессах »
Это vbs? Получается очень интересно: калькулятор запускается, а ваша программа не хочет. Надо подумать.
Попутный вопрос: как я понял, программа cpustats.exe запускается в командном окне. При запуске появляются какие-либо сообщения (в норме и в аварийном случае)? Информация о CPUSTATS.EXE
Это нежелательная программа.
Этот файл был идентифицирован как программа, которая нежелательна для работы на вашем компьютере. Это состоит из программ, вводящих в заблуждение, вредных или нежелательных.

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




© OSzone.net 2001-2012