2014-10-07 51 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退出請參閱我的答案。 – 2014-10-07 11:08:38

+0

其實,我想覆蓋PowerShell的退出和Ctrl + C,Ctrl + C的處理方式是不一樣的嗎? (我正在啓動一個後臺IO線程,如果用戶中止該cmdlet,我希望能夠中止) – 2014-10-07 23:37:10

回答

4

在PowerShell中使用的發動機事件PowerShell.Exiting,並指定處理它的腳本塊。

這裏是例子:

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

是的,這是票據引擎事件。我知道PowerShell事件是關鍵,但不知道下一步該去哪裏。非常感謝。 – 2014-10-07 23:31:49