如果powershell脚本因任何原因失败,我需要一种能够让批处理脚本退出并写入日志文件的方法。
现在我有类似的东西:
SET DBSCRIPT=C:\Scripts\UpdateAppDB.ps1
IF EXISTS %DBSCRIPT% (
POWERSHELL -Command %DBSCRIPT%
) ELSE (
ECHO "Script not found." >> C:\TestResults\TestLog.txt`
EXIT
)
有没有办法处理在运行powershell期间可能发生的错误?
答案 0 :(得分:2)
如果出现错误,PowerShell命令应返回退出代码> 0。你可以像这样处理:
set "DBSCRIPT=C:\Scripts\UpdateAppDB.ps1"
if exists %DBSCRIPT% (
powershell -Command %DBSCRIPT% || (
rem Error handling routines here
)
) else (
echo "Script not found." >> C:\TestResults\TestLog.txt
exit
)
或类似(需要启用延迟扩展):
setlocal EnableDelayedExpansion
set "DBSCRIPT=C:\Scripts\UpdateAppDB.ps1"
if exists %DBSCRIPT% (
powershell -Command %DBSCRIPT%
if !errorlevel! neq 0 (
rem Error handling routines here
)
) else (
echo "Script not found." >> C:\TestResults\TestLog.txt
exit
)
作为旁注:由于您要运行PowerShell脚本,我使用的是powershell -File "%DBSCRIPT%"
而不是powershell -Command "%DBSCRIPT%"
。变量周围的双引号可以处理路径中的潜在空格。
编辑:要明确,上述代码只处理来自PowerShell可执行文件或PowerShell脚本的非零返回码。它不会(也不能)替换PowerShell脚本中的错误处理。如果您希望PowerShell脚本终止所有错误(并使用非零退出代码指示错误状态),那么PowerShell脚本中至少需要这样的内容:
$ErrorActionPreference = "Stop"
try {
# ...
# rest of your code here
# ...
} catch {
Write-Error $_
exit 1
}