Выйдите из команды, если это занимает слишком много времени в powershell

$uri="http:\\www.SomeUrl.com"
Measure-Command { $request = Invoke-WebRequest -Uri $uri -UseBasicParsing}

В приведенном выше сценарии powershell, как я могу выйти из Invoke-WebRequest, если это занимает более 10 секунд, и, если возможно, вернуть код ошибки.


person Amith B    schedule 17.02.2020    source источник
comment
Информацию о командлетах, у которых еще нет параметра -Timeout, см. в разделе время ожидания команды Powershell.   -  person iRon    schedule 17.02.2020
comment
Как правило, вы можете установить тайм-аут для заданий: > stackoverflow.com/questions/21176487/   -  person js2010    schedule 17.02.2020


Ответы (1)


Вы можете использовать параметр Timeout для команды Invoke-WebRequest,

$uri="http://www.SomeUrl.com"
Measure-Command { $request = Invoke-WebRequest -Uri $uri -UseBasicParsing -Timeout 10}

Вы можете закрыть его блоком try/catch, чтобы получить сообщение об ошибке.

try {
    $uri="http://www.SomeUrl.com"
    Measure-Command { $request = Invoke-WebRequest -Uri $uri -UseBasicParsing -Timeout 10 -ErrorAction Stop}
}
catch {
    Write-Output "Timeout occured. Exception: $_"
}

Вы также можете использовать -Headers @{"Cache-Control"="no-cache"} с Invoke-WebRequest, которые не будут кэшировать страницы, которые вы посещаете.

person Jawad    schedule 17.02.2020
comment
try { $uri=http:\\www.google.com $time=Measure-Command { $request = Invoke-WebRequest -Uri $uri -UseBasicParsing -Timeout 1 -ErrorAction Stop} Всего секунд записи на хост: $time.TotalSeconds } catch { Произошел тайм-аут записи-вывода. Исключение: $_ } Привет, я пробовал вышеописанное, но результат, который я получил, выглядит следующим образом: Всего секунд: 4.1600271 - person Amith B; 17.02.2020
comment
Так как он превысил 1 секунду, это должно произойти через ошибку. - person Amith B; 17.02.2020
comment
Когда вы звоните несколько раз, данные уже кэшируются. Попробуйте это с другим сайтом, загрузка которого может занять больше времени. - person Jawad; 17.02.2020
comment
Большое спасибо, это сработало с другим URL. Но есть ли способ очистить кеш и продолжить с того же URL-адреса. - person Amith B; 17.02.2020
comment
-Headers @{"Cache-Control"="no-cache"} ... вы можете добавить это в свой Invoke-WebRequest - person Jawad; 17.02.2020
comment
@AmithB Будучи новичком в SO, вы можете этого не знать, но обычно примите ответ, который решил вашу проблему, нажав значок ✓ слева. Это поможет другим людям с похожим вопросом найти его более легко и мотивирует людей отвечать на ваши вопросы. - person Theo; 17.02.2020