我正在阅读有关如何从powershell脚本获取错误并将其传递给调用它的批处理文件的内容。 bacth文件只是一个Jenkins构建步骤(执行Win批处理),它就像那样简单:
powershell -ExecutionPolicy Unrestricted -File C:\Users\hicciuser\invoke.ps1
echo %ERRORLEVEL%
exit %ERRORLEVEL%
powershell脚本非常简单:
Invoke-WebRequest -Uri "https://random.url" -TimeoutSec 2
Exit $LASTEXITCODE
事实证明,如果网络请求失败(在这种情况下超时),那么%ERRORLEVEL%
似乎仍为0.
如果在脚本中我执行Exit 1
,那么%ERRORLEVEL%
已正确设置,因此Invoke-WebRequest
命令似乎未在失败时设置正确的退出代码。是否有一种更简单的方法可以解决这个问题?
答案 0 :(得分:0)
最后我选择了这个解决方案,但我真的想知道如何从Invoke-WebRequest
(或任何其他CmdLet)返回正确的错误代码:
$failing = 0
$Error.Clear()
try {
Invoke-WebRequest -Uri $url
}
catch {
Write-Host $Error
$failing = 1
}
Exit $failing
至少我可以获得一个不为零的退出代码,Jenkins会很开心并且无法构建。
答案 1 :(得分:0)
如果您想退出响应状态代码,可以执行以下操作:
try {
Invoke-WebRequest -Uri $url
Exit 0
}
catch {
Exit $_.Exception.Response.StatusCode.Value__
}