diff --git a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs index f26a82d37a0..c16bd481692 100644 --- a/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs +++ b/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs @@ -304,11 +304,19 @@ private static void MyBreakHandler(object sender, ConsoleCancelEventArgs args) switch (args.SpecialKey) { case ConsoleSpecialKey.ControlC: - SpinUpBreakHandlerThread(false); + SpinUpBreakHandlerThread(shouldEndSession: false); return; case ConsoleSpecialKey.ControlBreak: - // Break into script debugger. - BreakIntoDebugger(); + if (s_cpp.NonInteractive) + { + //ControlBreak mimics ControlC in Noninteractive shells + SpinUpBreakHandlerThread(shouldEndSession: true); + } + else + { + // Break into script debugger. + BreakIntoDebugger(); + } return; } } @@ -325,13 +333,21 @@ private static bool MyBreakHandler(ConsoleControl.ConsoleBreakSignal signal) switch (signal) { case ConsoleControl.ConsoleBreakSignal.CtrlBreak: - // Break into script debugger. - BreakIntoDebugger(); + if (s_cpp.NonInteractive) + { + //ControlBreak mimics ControlC in Noninteractive shells + SpinUpBreakHandlerThread(shouldEndSession: true); + } + else + { + // Break into script debugger. + BreakIntoDebugger(); + } return true; // Run the break handler... case ConsoleControl.ConsoleBreakSignal.CtrlC: - SpinUpBreakHandlerThread(false); + SpinUpBreakHandlerThread(shouldEndSession: false); return true; case ConsoleControl.ConsoleBreakSignal.Logoff: @@ -343,12 +359,12 @@ private static bool MyBreakHandler(ConsoleControl.ConsoleBreakSignal signal) case ConsoleControl.ConsoleBreakSignal.Close: case ConsoleControl.ConsoleBreakSignal.Shutdown: - SpinUpBreakHandlerThread(true); + SpinUpBreakHandlerThread(shouldEndSession: true); return false; default: // Log as much sqm data as possible before we exit. - SpinUpBreakHandlerThread(true); + SpinUpBreakHandlerThread(shouldEndSession: true); return false; } }