gpt4 book ai didi

powershell - 如何从 Remove-Item 中捕获错误并发出警告?

转载 作者:行者123 更新时间:2023-12-02 08:00:33 62 4
gpt4 key购买 nike

在持续集成管道 (Azure DevOps) 中使用的部署后脚本中,我正在删除旧文件。

基本上,它是一个 PowerShell 脚本,可删除部署目录中的除当前文件夹外的所有发布文件夹。

有时,Remove-Item 由于某种原因而失败(例如,旧文件仍由部署机器上的某个人打开)

没什么大不了的。我不希望出现错误,说我的整个部署因此而失败。但是,我想要一个警告,所以我知道它发生了。

例如(MCVE):

Remove-Item INEXISTENT_FILE

问题 : 它会导致错误。

尝试 1:
Remove-Item INEXISTENT_FILE -ErrorAction SilentlyContinue

问题 :它完全消除了错误,这不是我想要的(我想要一个警告)

尝试 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!"
}

问题 :它不起作用,它不显示 if部分。如果我删除“SilentlyContinue”错误操作,它只会发出一个错误,并且在任何情况下都不会进入 if部分。

尝试 3:我也尝试使用此处建议的 Try Catch 块: PowerShell -ErrorAction SilentlyContinue Does not work with Get-ADUser
Try {
Remove-Item INEXISTENT_FILE
}
Catch {
Write-Warning "Warning, something failed!"
}

问题 :它也永远不会进入 catch 块(!?)

如果 Remove-Item 失败,任何人都有另一种选择来显示警告而不是错误?

最佳答案

Remove-Item产生的错误被认为是“非终止”,这意味着它会被“try/catch”忽略。要强制它“可见”以“尝试/捕获”,请使用 ErrorAction范围:
Remove-Item INEXISTENT_FILE -ErrorAction Stop
或者,您可以在脚本级别(即对于所有后续命令)进行更改,如下所示:
$ErrorActionPreference = 'Stop'
可以使用 $_.Exception.Message 检索错误消息或 $error[0]

关于powershell - 如何从 Remove-Item 中捕获错误并发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118743/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com