none
Определение "зависания" команды RRS feed

  • Вопрос

  • День добрый. Настраиваю собственный дистрибутив автоматической установки Windows 7. В конце выполняю поиск обновлений посредством PSwindowsUpdate. Все бы хорошо, но ровно до тех пор пока не наступает "черный", каждый второй вторник месяца, в эти дни приходят обновления и в 9 из 10 случаях их поиск занимает несколько часов и длится это несколько дней.

    Теперь собственно суть вопроса. 

    Get-WUinstall выдает в консоли следующее 

    VERBOSE: Connecting to Microsoft Update server. Please wait...

    и так до тех пор пока не получит список обновлений. Как можно включить таймер при появлении этой строки и если в течении скажем  10 минут новых строк не появилось, то прервать выполнения команды?

    Заранее спасибо


    14 июля 2016 г. 11:59

Ответы

  • Get-Help Start-Job
    Get-Help Wait-Job
    $id = Start-Job {Get-WUinstall}
    Wait-Job $id -TimeOut 600
    
    if((Receive-Job $id -Keep).Count -eq 0) {
    	Stop-Job $id
    }
    Посмотреть текущий вывод без удаления результатов: Receive-Job $id -Keep
    • Помечено в качестве ответа Omni_Vidente 14 июля 2016 г. 13:41
    14 июля 2016 г. 12:18
    Отвечающий

Все ответы

  • Get-Help Start-Job
    Get-Help Wait-Job
    $id = Start-Job {Get-WUinstall}
    Wait-Job $id -TimeOut 600
    
    if((Receive-Job $id -Keep).Count -eq 0) {
    	Stop-Job $id
    }
    Посмотреть текущий вывод без удаления результатов: Receive-Job $id -Keep
    • Помечено в качестве ответа Omni_Vidente 14 июля 2016 г. 13:41
    14 июля 2016 г. 12:18
    Отвечающий
  • Все хорошо, только Stop-job отрабатывает через 2 минуты ожидания.

    Как получить pid процесса запущенного в Start-job?

    14 июля 2016 г. 19:50
  • Добавить в блок {} вывод переменной $pid и через Receive-Job получить ее, условие Count -eq 0 тоже поменять на Count -eq 1.
    15 июля 2016 г. 6:30
    Отвечающий
  • Добавить в блок {} вывод переменной $pid и через Receive-Job получить ее, условие Count -eq 0 тоже поменять на Count -eq 1.

    А как это сделать? на ум приходит только вывод $Pid в event или текстовый файл, можно сделать как то проще? 

    PS от count отказался, т.к. 0 возвращается и в случаях когда не удается соединится с сервером и в случаях когда обновлений не найдено или когда требуется перезагрузка. Остановился на варианте:

    $test = $job.ChildJobs.Verbose
    if (($Test) -and !($Test -like "*found*"))

    А вот как получить pid из job пока не разобрался

    15 июля 2016 г. 18:23