【发布时间】:2021-08-30 20:14:49
【问题描述】:
PowerShell 5.1
我编写了一个包装脚本,它启动另一个脚本,记录其输出(通过 Start-Transcript),如果它以非零代码退出,则发送一封电子邮件,最后根据文件大小轮换日志文件。
我只想捕获会导致被调用脚本在自行执行时退出的错误。 (脚本终止术语基于此处的讨论:https://github.com/MicrosoftDocs/PowerShell-Docs/issues/1583)。
try {
Invoke-Expression "& '$Script' $ArgList"
$err = $LastExitCode
} catch {
Write-Error -ErrorRecord $_
$err = 1
}
抓住这个:
$ErrorActionPreference = 'Stop'
Remove-Item -Path DoesntExist
或者这个:
throw "Error"
但不是这个(脚本应该继续执行,如果不是通过日志脚本调用的话):
Test-Path -Foo bar
有可能吗?还是有更好的方法?
【问题讨论】:
-
不要定义
$ErrorActionPreference变量,而是在cmdlet中设置它,例如忽略Test-Path -Foo bar -ErrorAction SilentlyContinue的错误并将其用于Remove-Item -Path DoesntExist -ErrorAction Stop -
我希望被调用的脚本表现得像单独执行时一样。在此示例中,
Test-Path失败,但脚本继续运行。但是当我通过包装脚本调用它时,它会捕获该异常并停止。 -
感谢您的提示,我会研究替代方案。
标签: powershell exception