Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата Iska:
Уже ж было такое недавно. »
Навеяло: Было-было-было... но прошло...
Вот тут было, обратное действие...


Цитата АннаКузнецова:
Хочется чтобы скрипт, если программа не запущена- писал в лог сообщение о недоступности или в конце концов просто 0 выводил, а затем эту программу бы запускал.
Путь до программы: E:\Program Files (x86)\POST\Sefmail\
Прошу помощи в автоматизации моего процесса »
Если адаптировать скрипт под задачу, то как-то так:
Слежение за выключением процесса 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


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

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:45, 12-06-2021 | #14