我正在对令牌服务器进行ReST api调用并获取令牌。然后通过传入令牌进行另一个ReST api调用,并保存查询响应。当一切都按预期进行时,我就能实现目标。但是,如果我遇到错误,我需要引发powershell错误,并希望powershell脚本的执行在故障点停止。作为下一步,我需要将api响应保存到网络共享中。我注意到即使ReST api调用由于某种原因失败,执行也会继续。我使用一个通用的try{}
catch{}
块与一些通用的错误信息。我一直在尝试提高powershell抛出的实际错误,但不工作。
豪华:
try {
$clientSecret = ''
$clientId = ''
$tenantId = ''
# Construct URI
$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
# Construct Body
$body = @{
client_id = $clientId
client_secret = $clientSecret
scope = 'https://graph.microsoft.com/.default'
grant_type = 'client_credentials'
}
$Uri = 'https://apiserver.com/v1/data'
# Get OAuth 2.0 Token
$tokenRequest = Invoke-WebRequest -Method Post -Uri $uri -ContentType 'application/x-www-form-urlencoded' -Body $body -UseBasicParsing
# Access Token
$token = ($tokenRequest.Content | ConvertFrom-Json).access_token
$api = Invoke-RestMethod -Method Get -Uri $Uri -ContentType 'application/json' -Headers @{Authorization = "Bearer $token"} -ErrorAction Stop
}
catch {
"Error"
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
Write-Host "ErrorMessage:" $_.ErrorDetails.Message
}
我需要引发powershell错误,并希望powershell脚本的执行在失败点停止。
当终止错误触发try
/catch
/finally
语句的catch
块时,默认继续执行
要重新抛出脚本终止(致命)错误,只需在catch
块中使用throw
。
或者,如果您不需要在重新抛出错误之前处理它,则将$ErrorActionPreference = 'Stop'
置于作用域的顶部,这将导致任何错误,包括非终止错误,变成脚本终止(致命)错误。