2012-05-24 7 views
5

पावरहेल स्क्रिप्ट को उपयोगकर्ता द्वारा ctrl-c दबाकर आसानी से समाप्त किया जा सकता है। क्या पावरहेल स्क्रिप्ट को ctrl-c पकड़ने का कोई तरीका है और उपयोगकर्ता से यह पुष्टि करने के लिए कहें कि क्या वह वास्तव में स्क्रिप्ट को समाप्त करना चाहता था?क्या ctrl-c को पकड़ने का कोई तरीका है और उपयोगकर्ता से पुष्टि करने के लिए कहें?

+0

मैं विपरीत करने का एक तरीका ढूंढ रहा हूं। पावरहेल हमेशा मुझे समाप्ति की पुष्टि करने के लिए कहता है। –

+0

आप इसे करने के लिए कैसे मिला? –

+0

यह ठीक है जब मैंने विंडोज 7 स्थापित किया था; ये मुझे पागल कर रहा है! –

उत्तर

2

चेकआउट this post on the MSDN forums

[console]::TreatControlCAsInput = $true 
while ($true) 
{ 
    write-host "Processing..." 
    if ([console]::KeyAvailable) 
    { 
     $key = [system.console]::readkey($true) 
     if (($key.modifiers -band [consolemodifiers]"control") -and ($key.key -eq "C")) 
     { 
      Add-Type -AssemblyName System.Windows.Forms 
      if ([System.Windows.Forms.MessageBox]::Show("Are you sure you want to exit?", "Exit Script?", [System.Windows.Forms.MessageBoxButtons]::YesNo) -eq "Yes") 
      { 
       "Terminating..." 
       break 
      } 
     } 
    } 
} 

आप पुष्टि के लिए एक जीयूआई MessageBox का उपयोग नहीं करना चाहते हैं, आप के बजाय पढ़ने के लिए होस्ट का उपयोग कर सकते, या $ Host.UI.RawUI.ReadKey() के रूप में डेविड ने अपने जवाब में पता चला है।

2
while ($true) 
{ 
    Write-Host "Do this, do that..." 

    if ($Host.UI.RawUI.KeyAvailable -and (3 -eq [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character)) 
    { 
      Write-Host "You pressed CTRL-C. Do you want to continue doing this and that?" 
      $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") 
      if ($key.Character -eq "N") { break; } 
    } 
} 
+0

तो मुझे इसे अपने सभी कोड के चारों ओर लपेटना होगा? –

+0

क्या यह अन्य कोड में हस्तक्षेप नहीं करेगा जो $ host.ui.rawui.readkey() का उपयोग करता है? –

संबंधित मुद्दे

 संबंधित मुद्दे