![]() |
Автоматизация запущенного процесса
Здравствуйте, уважаемые форумчане. Хочу попросить Вас о помощи в написании скрипта
Попробую описать подробно задачку: На компьютере, должен постоянно быть запущен процесс sefmail.exe, но по причине человеческих рук, либо сверхестественных сил, этот процесс постоянно закрывается. (человеские руки считаю более очевидным :) ) Хочется чтобы скрипт, если программа не запущена- писал в лог сообщение о недоступности или в конце концов просто 0 выводил, а затем эту программу бы запускал. Путь до программы: E:\Program Files (x86)\POST\Sefmail\ Прошу помощи в автоматизации моего процесса :) |
Нашла готовый скрипт здесь: http://forum.oszone.net/thread-348778.html но он лог не пишет, если программа не работает :(
|
Цитата:
|
Цитата:
и да, это на PowerShell Код:
# Мониторинг процесса (каждые 5 сек), пропал - получим сообщение и запустим процесс через Хсек -программа, которую он контролирует, должна быть запущена -после этого запускается скрипт и висит ... везде, в процессах. его окно (можно свернуть. но нельзя закрывать) -в случае если процесс программы пропал будет сообщение в окне об этом и напишется время в лог -программа запустится после таймера, в данном скрипте - 10сек -все начнется заново |
Вложений: 1
Я запустила скрипт, при этом поменяла calc на процесс wmail. Но по моему ничего не получилось. Картинку прилагаю. Подскажите пожалуйста, что делаю не так
|
Elven, я имела ввиду этот скрипт:
'******************************************************************* ' Описание: Запуск отсутствующей программы '******************************************************************* Exe = "Notepad.exe" ' Исполнимый файл программы PathExe = "C:\WINDOWS\system32" ' Путь к файлу (без \ на конце) On Error Resume Next If Err.Number = 0 Then Set WMI = GetObject("winMgmts:") Set Processes = WMI.ExecQuery("SELECT * FROM Win32_Process Where Name=""" + Exe + """") Present = False For Each Process In Processes Present = (UCase(Process.Name) = UCase(Exe)) ' MsgBox Process.Name + vbCrLf + Exe Next Set WS = CreateObject("WScript.Shell") If Not Present Then WS.Exec PathExe + "\" + Exe End If End If |
АннаКузнецова, если Sefmail запущен, что у вас в Powershell выводит команда
Код:
get-process |? path -Match 'Sefmail' |
DJ Mogarych,
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 636 58 41588 78456 289 4*617,75 120 sefwmail |
Что-то вроде того (powershell):
Код:
if (!(get-process sefwmail -ErrorAction SilentlyContinue)) { Программа - powershell Добавить аргументы: Код:
-file "путь к скрипту\script.ps1" -executionpolicy bypass |
DJ Mogarych, очень Вам признательна :) все зааботало. Только вопрос- скрипт ведь не проверяет запущен ли процесс? потому как, работает программа или нет, он в лог пишет Sefmail не запущен, запускаю
|
Вообще-то, проверяет.
Потестируйте с запущенной и незапущенной программой: Код:
if (!(get-process sefwmail -ErrorAction SilentlyContinue)) { |
Коллеги, да не надо ничего проверять. Надо запускать процесс из самого пакетного файла/скрипта с ожиданием завершения.
Наподобие (на WSH): Скрытый текст
Код:
Option Explicit Уже ж было такое недавно. |
Цитата:
вот теперь отключите (закройте окно крестиком) процесс и подождите более 10 сек, ну информацию о исчезновении процесса сразу покажет как и запись в лог иначе скорее всего низкая версия PowerShell, надо обновить |
Цитата:
Вот тут было, обратное действие... Цитата:
Слежение за выключением процесса script.ps1
Код:
# Не работает в версиях новее PS v5.1, https://github.com/PowerShell/PowerShell/issues/13999 Изначально, процесс должен быть запущен. При закрытии процесса, в консоль будет выдаваться соответствующее сообщение и запуск необходимого процесса, а также при закрытии других процессов, тоже будут сообщения, но без запусков... |
Цитата:
|
Привет, можно сделать таким образом.
$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 "<Каталог со скриптом>" "<Каталог с логами>" |
Время: 12:16. |
Время: 12:16.
© OSzone.net 2001-