Если я понимаю ваш вопрос, вы хотите знать, можете ли вы как-то уловить нажатие кнопки «Стоп» (Rece ipt сигнала разрыва). Я не знаю, как, в powershell, заметить сигнал прерывания, но вы можете использовать блок finally, чтобы убедиться, что ваш код Dispose вызывается. Вот мой простой тест:
try{
while($true)
{
Write-Host "In try block . . . "
Start-Sleep 1
}
}
catch
{
Write-Host "In catch block"
}
finally
{
Write-Host "In finally block"
}
Когда я запускаю его из ISE и нажмите кнопку остановки (или нажмите Ctrl-C) я получаю:
# C:\Temp> .\stopEx.ps1
In try block . . .
In try block . . .
In finally block
Я не знаю, что вы имеете в виду здесь «остановить скрипт». Вы говорите об ошибках? Затем взгляните на «Get-Help about_Try_Catch_Finally -ShowWindow». Если вы говорите о том, что нажали кнопку разрыва в PowerShell ISE, я не знаю ничего, что могло бы вызвать это. Это эквивалент удара Ctrl-Break, который завершает процесс. –
Так звучит для меня, как будто вы используете цикл без выхода, и вам все равно хотелось бы действовать на все, что происходит в цикле, когда вы решите, что пришло время выйти? Дайте нам более подробную информацию о том, что вы пытаетесь сделать, и кто-то может помочь. Все, что приходит на ум - сначала объявить пустую коллекцию $ collection = @(), а затем $ collection + = (некоторые вещи в цикле), а затем, когда вы остановите скрипт, вы все равно сможете получить доступ к коллекции $. В противном случае вместо того, чтобы останавливать скрипт вручную, вы можете проверить его на наличие какого-либо условия, например, файл, который вы создаете, когда он должен остановиться. –
@ChrisN ya loop $ true –