Я хочу установить ограничение по времени на PowerShell (v2) сценарий, таким образом, он насильственно выходит после того, как то ограничение по времени истекло.
Я вижу в PHP, у них есть команды как set_time_limit и max_execution_time, где можно ограничить, сколько времени сценарий и даже функция могут выполниться для.
С моим сценарием/цикл с условием продолжения, который смотрит в то время, не является соответствующим, как я называю библиотеку внешнего кода, которая может просто зависать в течение долгого времени.
Я хочу ограничить блок кода и только позволить ему работать в течение x секунд, после которых я завершу тот блок кода и возвращу ответ пользователю что приведенный к таймауту сценарий.
Я посмотрел на фоновые задания, но они работают в другом потоке, так не будет иметь, уничтожают права по родительскому потоку.
Кто-либо имел дело с этим или имеет решение?
Спасибо!
Вот пример использования таймера. Лично я не пробовал, но думаю, должно сработать:
function Main
{
# do main logic here
}
function Stop-Script
{
Write-Host "Called Stop-Script."
[System.Management.Automation.Runspaces.Runspace]::DefaultRunspace.CloseAsync()
}
$elapsedEventHandler = {
param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
Write-Host "Event handler invoked."
($sender -as [System.Timers.Timer]).Stop()
Unregister-Event -SourceIdentifier Timer.Elapsed
Stop-Script
}
$timer = New-Object System.Timers.Timer -ArgumentList 2000 # setup the timer to fire the elapsed event after 2 seconds
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed -Action $elapsedEventHandler
$timer.Start()
Main