Powershell - изменение поведения кнопок X на консоли - PullRequest
1 голос
/ 29 октября 2019

Я работаю со сценарием, который использует Excel в качестве приложения COM, поэтому всякий раз, когда я закрываю свой сценарий с помощью кнопки X, он оставляет задание Excel открытым в фоновом режиме.

Так что у меня естьфункция, которая закрывает Exceltask всякий раз, когда я даю «выход» в качестве пользовательского ввода, но я хочу иметь возможность закрыть консоль и преуспеть с помощью кнопки X на консоли. Есть ли способ, которым я могу изменить поведение с помощью кнопки X, чтобы она сначала активировала функцию? Чтобы дать представление о функции:

function Close(){   
    if($workbook){$workbook.close($false)}
    if($excel){[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$excel)}
    [gc]::Collect()
    [gc]::WaitForPendingFinalizers()
    Remove-Variable excel -ErrorAction SilentlyContinue
    exit
}

РЕДАКТИРОВАТЬ

Кажется, что выход из кнопки x останется проблемой для меня, как это thread (github) предлагает.

Итак, причина, по которой он интересуется, , что :

"Событие никогда запускается, если PowerShell не контролирует собственное завершение: таким образом, закрытие окна / выход из эмулятора терминала не запустит обработчик событий. "

, что именно так и происходит, нажав клавишу x-кнопка. Так что эта проблема рассматривается в PS 7.0. Кроме того, эта тема , в которой обсуждается та же проблема, также помогла мне найти тему на github.

1 Ответ

1 голос
/ 29 октября 2019

Вы можете выполнять события при закрытии формы:

$form.Add_FormClosing({
    # Actions to carry out when form closed.
}) 

Редактировать:

$ Null подавляет вывод - вы можете удалить его, чтобы увидеть, что происходит.

На моем ПК работает следующий код:

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action { New-Item -Path c:\temp -Name text.txt }

Файл, созданный при закрытии окна PS

...