2009-11-10 11 views
21
में रोक

मैं कैसे को पकड़ने और एक PowerShell स्क्रिप्ट में Ctrl +सी निपटेंगे? मैं समझता हूं कि मैं इसे Powershell.Stop() विधि के लिए ओवरराइड समेत v2 में cmdlet से कर सकता हूं, लेकिन मुझे स्क्रिप्ट में उपयोग के लिए एनालॉग नहीं मिल रहा है।सुन्दरता Powershell

मैं वर्तमान में सफाई via an end block निष्पादित कर रहा हूं, लेकिन स्क्रिप्ट रद्द होने पर मुझे अतिरिक्त कार्य करने की आवश्यकता है (पूरा होने के विरोध में)।

उत्तर

5

आप विधि पर वर्णित इस्तेमाल कर सकते हैं here on PoshCode

सारांश:

सेट

[console]::TreatControlCAsInput = $true 

तो

if($Host.UI.RawUI.KeyAvailable -and (3 -eq 
    [int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character)) 
+0

वाह, वह पागल है। मैंने सी # में एक cmdlet के रूप में अपनी स्क्रिप्ट को फिर से लिखना समाप्त कर दिया ताकि मैं स्टॉप() को ओवरराइड कर सकूं। –

30

documentation कोशिश catch- के लिए उपयोग कर उपयोगकर्ता इनपुट के लिए मतदान अंत में कहते हैं:

ए अंत में अवरुद्ध करता है भले ही आप स्क्रिप्ट को रोकने के लिए CTRL + C का उपयोग करते हैं। अंततः ब्लॉक भी चलाता है यदि कोई निकास कीवर्ड स्क्रिप्ट ब्लॉक से स्क्रिप्ट को रोकता है।

निम्नलिखित उदाहरण देखें। इसे चलाएं और ctrl-c दबाकर इसे रद्द करें।

try 
{ 
    while($true) 
    { 
     "Working.." 
     Start-Sleep -Seconds 1 
    } 
} 
finally 
{ 
    write-host "Ended work." 
} 
+0

यह सच है, लेकिन आखिरकार न केवल इसलिए चलेंगे क्योंकि बाहर निकलने के लिए कहा जाता था, लेकिन यदि कोशिश ब्लॉक सफल होता है। जैसा कि मैंने अपने प्रश्न में संकेत दिया है, स्क्रिप्ट रद्द होने पर मुझे अतिरिक्त कार्य करने की आवश्यकता है (जैसा कि पूरा होने के विरोध में है)। –

+5

@ fatcat111 एक बूलियन ध्वज का उपयोग करें। उदाहरण के लिए, अपने 'try' के अंत में '$ didcomplete = $ true' सेट करें और इसे' if ($ अपूर्ण) {लिखें-होस्ट" समाप्त कार्य के साथ जांचें। " } 'अंत में' –

+0

दुर्भाग्यवश, यदि PowerShell कंसोल विंडो बंद है तो आखिरकार ब्लॉक निष्पादित नहीं किया जाता है। –

1

वहाँ भी है कि इस के लिए इस्तेमाल किया जा सकता $PSCmdlet पर एक Stopping संपत्ति।

+0

'रोकना' प्रति 'PowerShell/PowerShell # 6322] (https://github.com/PowerShell/PowerShell/issues/6322) को रोकने पर भी 'झूठा' है। – alx9r