2014-10-07 2 views
3

Как поймать событие закрытия консоли в PowerShell?Как поймать событие закрытия консоли в PowerShell?

Я попытался добавить обработчик управления консоли, и он отлично подходит для CMD, но не в PowerShell, есть ли другой способ в PowerShell?

Пример:

namespace Test_ConCtrl { 
    class Program { 
     public enum CtrlTypes : uint { CTRL_C = 0, ... } 

     public delegate Boolean ConsoleCtrl_Delegate(CtrlTypes CtrlType); 

     [DllImport("kernel32.dll")] 
     static extern bool SetConsoleCtrlHandler(
      ConsoleCtrl_Delegate HandlerRoutine, bool Add); 

     public static Boolean My_CtrlHandler(CtrlTypes inConType) { 
      switch(inConType) { ... } 
     } 

     static void Add_Handler() { 
      ConsoleCtrl_Delegate myHandler = My_CtrlHandler; 
      SetConsoleCtrlHandler(myHandler, true); 
     } 

     ... 
+0

Это не ясно, если речь идет о «консоли близко» (то есть PowerShell выхода, в пути) или событий Ctrl-C. Для выхода PowerShell см. Мой ответ. –

+0

На самом деле, я хотел закрыть оба выхода PowerShell и Ctrl + C, а Ctrl + C обрабатывается по-другому? (Я запускаю фоновый поток ввода-вывода, и я хотел бы иметь возможность прервать, если пользователь прервет командлет) –

ответ

4

В PowerShell использовать событие двигателем PowerShell.Exiting и указать скрипт блоки, которые обрабатывают его.

Вот пример:

Register-EngineEvent PowerShell.Exiting -Action { "Exiting $(Get-Date)" >> C:\TEMP\log.txt } 
+0

Да, это события, связанные с движением билетов. Я знал, что PowerShell eventing был ключевым, но не знал, куда идти дальше. Огромное спасибо. –

Смежные вопросы