YuS_2
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: [cmdletbinding()] param( # Список на выключение можно задать в командной строке: # .\script.ps1 'notepad.exe','win32calc.exe' # или здесь: [string[]]$process = ('example1.exe','win32calc.exe') ) add-type -assembly system.windows.forms function enable-watchevent { $query = new-object system.management.wqleventquery '__instancecreationevent', ` (new-object timespan 0,0,1),'targetinstance isa "win32_process"' $processwatcher = new-object system.management.managementeventwatcher $query $action = { new-event 'powershell.processcreated' -sender $sender -eventarguments $eventargs.newevent.targetinstance } $script:name = 'watchevent' $script:id = 'powershell.processcreated' $script:job = register-objectevent -input $processwatcher -eventname ` "eventarrived" -action $action -source $name } enable-watchevent $form = new-object windows.forms.form $form.autosize = $true $form.autosizemode = [windows.forms.autosizemode]::growandshrink $form.formborderstyle = [windows.forms.formborderstyle]::fixedtoolwindow $form.controlbox = $false $form.sizegripstyle = [windows.forms.sizegripstyle]::hide $form.text = 'Продолжить слежение за процессом' + ' ' + $process + '?' $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 if($process -contains ($a = (get-event $id).sourceargs.name)){ write-host Запущен $a ps $($a -replace '\.[^\n\.]*$')|kill remove-event $id $res = $form.showdialog() } else { write-host Это не процесс из списка на выключение `((get-event $id).sourceargs.name`) remove-event $id } } while ($res -ne 'No') if(get-event $id -ea 0){remove-event $id} get-job $job.name|remove-job -force |
| Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:39 22-09-2019 | Исправлено: YuS_2, 13:21 22-09-2019 |
|