|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоматизация запущенного процесса |
|
CMD/BAT - Автоматизация запущенного процесса
|
Забанен Сообщения: 6 |
Здравствуйте, уважаемые форумчане. Хочу попросить Вас о помощи в написании скрипта
Попробую описать подробно задачку: На компьютере, должен постоянно быть запущен процесс sefmail.exe, но по причине человеческих рук, либо сверхестественных сил, этот процесс постоянно закрывается. (человеские руки считаю более очевидным ) Хочется чтобы скрипт, если программа не запущена- писал в лог сообщение о недоступности или в конце концов просто 0 выводил, а затем эту программу бы запускал. Путь до программы: E:\Program Files (x86)\POST\Sefmail\ Прошу помощи в автоматизации моего процесса |
|
Отправлено: 12:41, 10-06-2021 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 20:57, 10-06-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Коллеги, да не надо ничего проверять. Надо запускать процесс из самого пакетного файла/скрипта с ожиданием завершения.
Наподобие (на WSH): Скрытый текст
Option Explicit With WScript.CreateObject("WScript.Shell") Do ' "E:\Program Files (x86)\POST\Sefmail\sefmail.exe" .Run "c:\windows\system32\notepad.exe", 1, True With WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Мои проекты\0344\log.txt", 8, True) .WriteLine Now() & vbTab & "сообщение о недоступности" .Close End With Loop End With WScript.Quit 0 Уже ж было такое недавно. |
Отправлено: 22:03, 10-06-2021 | #12 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата АннаКузнецова:
вот теперь отключите (закройте окно крестиком) процесс и подождите более 10 сек, ну информацию о исчезновении процесса сразу покажет как и запись в лог иначе скорее всего низкая версия PowerShell, надо обновить |
|
Отправлено: 05:02, 11-06-2021 | #13 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Вот тут было, обратное действие... Цитата АннаКузнецова:
Слежение за выключением процесса script.ps1
# Не работает в версиях новее PS v5.1, https://github.com/PowerShell/PowerShell/issues/13999 [cmdletbinding()] param( # Процесс для слежения можно задать в командной строке: # .\script.ps1 'notepad.exe','win32calc.exe' # или здесь: [string[]]$process = 'Sefmail.exe' add-type -assembly system.windows.forms #$control = {ps $process -ea 0} function enable-processdeletedevent { $query = new-object system.management.wqleventquery "__instancedeletionevent", (new-object timespan 0,0,1), "targetinstance isa 'win32_process'" $processwatcher = new-object system.management.managementeventwatcher $query $argsevents = @{ InputObject = $processwatcher EventName = "eventarrived" Action = { [void] (new-event -sourceid "processdeleted" -sender $sender ` -eventarguments $eventargs.newevent.targetinstance) } } $script:job = register-objectevent @argsevents } $id = "processdeleted" enable-processdeletedevent $form = new-object windows.forms.form $form.autosizemode = [windows.forms.autosizemode]::growandshrink $form.formborderstyle = [windows.forms.formborderstyle]::fixedtoolwindow $form.windowstate = [windows.forms.formwindowstate]::maximized $form.controlbox = $true $form.sizegripstyle = [windows.forms.sizegripstyle]::hide $form.text = 'Продолжить слежение?' $form.showintaskbar = $false $form.topmost = $true $form.startposition = 'CenterScreen' $btnyes = new-object windows.forms.button $btnyes.text = 'Да' $btnyes.location = new-object system.drawing.point(3,10) $btnyes.dialogresult = [windows.forms.dialogresult]::ok $form.controls.add($btnyes) $btnno = new-object windows.forms.button $btnno.text = 'Нет' $btnno.location = new-object system.drawing.point(110,10) $btnno.dialogresult = [windows.forms.dialogresult]::no $form.controls.add($btnno) do{ wait-event $id|out-null #$p = &$control if($process -contains ($a = (get-event $id).sourceargs.name)){ write-host Процесс $a был выключен $(get-date) #start $a start "E:\Program Files (x86)\POST\Sefmail\Sefmail.exe" remove-event $id $res = $form.showdialog() } else { write-host Это процесс не из списка для слежения `($a`) remove-event $id } } while ($res -ne 'No') if(get-event $id -ea 0){get-event $id|remove-event} get-eventsubscriber -sub $job.id|unregister-event get-job -id $job.id|remove-job -force Изначально, процесс должен быть запущен. При закрытии процесса, в консоль будет выдаваться соответствующее сообщение и запуск необходимого процесса, а также при закрытии других процессов, тоже будут сообщения, но без запусков... |
||
------- Отправлено: 13:45, 12-06-2021 | #14 |
Забанен Сообщения: 793
|
Цитата АннаКузнецова:
|
|
Отправлено: 23:16, 12-06-2021 | #15 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать Привет, можно сделать таким образом.
$Date = Get-Date -Format "yyyy-mm-dd HH:mm:ss" $filename = $args[0] $process = @() $process += Get-Process Sefmail -ea SilentlyContinue if ($process[0]){ echo "$date 1" > $filename } else{ echo "$date 0" > $filename } Только не забудте сделать в планировщике аргумент -executionpolicy unrestricted -file "<Каталог со скриптом>" "<Каталог с логами>" |
Отправлено: 08:32, 29-06-2021 | #16 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Проверки запущенного процесса. | Svnkill | Скриптовые языки администрирования Windows | 8 | 19-05-2021 14:42 | |
CMD/BAT - Проверка занимаемой памяти запущенного процесса | KaDirZhan | Скриптовые языки администрирования Windows | 7 | 29-04-2021 01:03 | |
Проверка запущенного процесса | Anarasius | AutoIt | 2 | 25-06-2014 11:39 | |
.NET - Получение PID процесса, запущенного из программы | Delirium | Программирование и базы данных | 2 | 07-12-2009 02:17 | |
Java - Отслеживание состояния запущенного процесса | EvgeniyQQQ | Программирование и базы данных | 15 | 02-10-2007 13:20 |
|