Powershell Try/Catch 或 If/Else 不适用于我的脚本
Powershell Try/Catch or If/Else is not working for my script
我有以下 powershell
从我的 Jenkins
:
运行的脚本
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
我尝试对 Try/Catch
或 If/Else
使用以下选项,但到目前为止没有任何效果(它转到 Else
/ Catch
甚至认为脚本成功通过:
选项 1
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
if ($sqlpackage.LastExitCode -eq 0) {
Get-Content sqlstdout.txt
}
else {
echo "An error occurred $Error[0]"
Get-Content sqlstderr.txt
exit $sqlpackage.LastExitCode
}
选项 2
try
{
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
}
catch{
echo "An error occurred $Error[0]"
Get-Content sqlstderr.txt
$LastExitCode = 1
exit $LastExitCode
}
你能帮我看看正确的语法吗?最终预期的行为是显示 sqlstdout.txt
以防它通过,而 sqlstderr.txt
以防它失败 + 使 jenkins
构建失败。
对于选项1,if块条件中的属性应该是ExitCode
,而不是LastExitCode
。
我有以下 powershell
从我的 Jenkins
:
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
我尝试对 Try/Catch
或 If/Else
使用以下选项,但到目前为止没有任何效果(它转到 Else
/ Catch
甚至认为脚本成功通过:
选项 1
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
if ($sqlpackage.LastExitCode -eq 0) {
Get-Content sqlstdout.txt
}
else {
echo "An error occurred $Error[0]"
Get-Content sqlstderr.txt
exit $sqlpackage.LastExitCode
}
选项 2
try
{
$sqlpackage = Start-Process -FilePath sqlpackage.exe -ArgumentList '/Action:Publish','/SourceFile:"Database Services\bin\Release\Database Services.dacpac"',"/TargetConnectionString:""Data Source=${Env};Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;Initial catalog=${Target}""",'/p:BlockOnPossibleDataLoss=True' -wait -PassThru -Credential $Cred -RedirectStandardOutput sqlstdout.txt -RedirectStandardError sqlstderr.txt
$sqlpackage.WaitForExit()
$sqlpackage
}
catch{
echo "An error occurred $Error[0]"
Get-Content sqlstderr.txt
$LastExitCode = 1
exit $LastExitCode
}
你能帮我看看正确的语法吗?最终预期的行为是显示 sqlstdout.txt
以防它通过,而 sqlstderr.txt
以防它失败 + 使 jenkins
构建失败。
对于选项1,if块条件中的属性应该是ExitCode
,而不是LastExitCode
。