キャッチして処理するにはどうすればよいですか Ctrl+C PowerShellスクリプトで? Powershell.Stop()
メソッドのオーバーライドを含めることで、v2のコマンドレットからこれを実行できることは理解していますが、スクリプトで使用するアナログが見つかりません。
現在クリーンアップを実行しています end
ブロックを介して ですが、スクリプトがキャンセルされたときに(最後まで実行するのではなく)追加の作業を実行する必要があります。
ここではPoshCode で説明されている方法を使用できます。
概要:
セットする
[console]::TreatControlCAsInput = $true
次に、を使用してユーザー入力をポーリングします
if($Host.UI.RawUI.KeyAvailable -and (3 -eq
[int]$Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho").Character))
documentation for try-catch-finallyのコメント:
CTRL + Cを使用してスクリプトを停止しても、Finallyブロックが実行されます。 ExitキーワードがCatchブロック内からスクリプトを停止した場合も、Finallyブロックが実行されます。
次の例を参照してください。実行し、ctrl-c
を押してキャンセルします。
try
{
while($true)
{
"Working.."
Start-Sleep -Seconds 1
}
}
finally
{
write-Host "Ended work."
}
$PSCmdlet
にはこれに使用できるStopping
プロパティもあります。