Как можно установить ограничение по времени для сценария PowerShell для выполнения за?

Я хочу установить ограничение по времени на PowerShell (v2) сценарий, таким образом, он насильственно выходит после того, как то ограничение по времени истекло.

Я вижу в PHP, у них есть команды как set_time_limit и max_execution_time, где можно ограничить, сколько времени сценарий и даже функция могут выполниться для.

С моим сценарием/цикл с условием продолжения, который смотрит в то время, не является соответствующим, как я называю библиотеку внешнего кода, которая может просто зависать в течение долгого времени.

Я хочу ограничить блок кода и только позволить ему работать в течение x секунд, после которых я завершу тот блок кода и возвращу ответ пользователю что приведенный к таймауту сценарий.

Я посмотрел на фоновые задания, но они работают в другом потоке, так не будет иметь, уничтожают права по родительскому потоку.

Кто-либо имел дело с этим или имеет решение?

Спасибо!

5
задан David Thomas 11 June 2010 в 03:07
поделиться

1 ответ

Вот пример использования таймера. Лично я не пробовал, но думаю, должно сработать:

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
1
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: