如果發生錯誤,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
}
不POWERSHELL設置* errorlevel *,你可以測試嗎? '如果錯誤級別1變壞了'。如果沒有其他回報,可能需要您「致電」POWERSHELL。 – 2014-11-05 18:17:14
它沒有,但如果不可能像批處理try> catch那樣做,我可以修改powershell來拋出退出代碼或其他東西。 – 2014-11-05 18:21:02
@SeanLong是的,你的腳本應該以適當的狀態碼退出。批處理沒有異常處理。它只能對外部命令返回的內容作出反應。 – 2014-11-05 18:23:34