Pac*_*ac0 3 error-handling powershell azure-devops
在持续集成管道 (Azure DevOps) 中使用的部署后脚本中,我正在删除旧文件。
基本上,它是一个 PowerShell 脚本,可删除部署目录中的除当前文件夹之外的所有发布文件夹。
有时,Remove-Item 由于某种原因而失败(例如,旧文件仍由部署机器上的某个人打开)
没什么大不了的。我不希望出现错误,说我的整个部署因此而失败。但是,我想要一个警告,所以我知道它发生了。
例如(MCVE):
Remove-Item INEXISTENT_FILE
Run Code Online (Sandbox Code Playgroud)
问题:它会导致错误。
尝试 1:
Remove-Item INEXISTENT_FILE -ErrorAction SilentlyContinue
Run Code Online (Sandbox Code Playgroud)
问题:它完全消除了错误,这不是我想要的(我想要一个警告)
尝试 2:我尝试按照此处的建议使用 ErrorVariable:https ://devblogs.microsoft.com/powershell/erroraction-and-errorvariable/
Remove-Item INEXISTENT_FILE -ErrorAction SilentlyContinue -ErrorVariable $removeItemError
if ($removeItemError) {
Write-Warning "Warning, something failed!"
}
Run Code Online (Sandbox Code Playgroud)
问题:它不起作用,它不显示if
零件。如果我删除“SilentlyContinue”错误操作,它只会发出一个错误,并且在任何情况下都不会进入该if
部分。
尝试 3:我也尝试使用此处建议的 Try Catch 块:PowerShell -ErrorAction SilentlyContinue 不适用于 Get-ADUser
Try {
Remove-Item INEXISTENT_FILE
}
Catch {
Write-Warning "Warning, something failed!"
}
Run Code Online (Sandbox Code Playgroud)
问题:它也永远不会进入 catch 块(!?)
如果 Remove-Item 失败,任何人都有另一种选择来显示警告而不是错误?
box*_*dog 10
产生的错误Remove-Item
被认为是“非终止”,这意味着它被“try/catch”忽略。要强制它变为“可见”以“尝试/捕获”,请使用以下ErrorAction
参数:
Remove-Item INEXISTENT_FILE -ErrorAction Stop
或者,您可以在脚本级别(即对于所有后续命令)进行更改,如下所示:
$ErrorActionPreference = 'Stop'
可以使用$_.Exception.Message
或检索错误消息$error[0]
归档时间: |
|
查看次数: |
6709 次 |
最近记录: |