所以我有一个按需运行的计划任务。
如果发生错误,有没有办法强制结束任务?
当它成功运行时,状态不会自动更新,我必须手动刷新。但是,当被调用的程序抛出异常时,任务仍处于运行状态。看来我希望它只是停止并记录异常。
在我的 powershell 脚本中,我正在调用开发服务器上的 web api 方法。像这样。请注意,异常处理仅尝试捕获调用 web 请求的脚本的任何问题,而不是 web api 本身。Web 应用程序有自己的异常处理和日志记录。
try {
$order_api = "http://dev-server.testserver.com/api/orderpipeline/Runfolder";
$order_response = Invoke-WebRequest -Uri $order_api -UseDefaultCredentials -ContentType "application/json" -Method Post -Body $jsonParams -TimeoutSec 10000;
}
catch{
# Capture exception detail
$err_message = $_.Exception | format-list -force | Out-String;
$log_message = $PSCommandPath + "`r`n" + " Something went wrong trying to invoke web request api, exception follows: " + "`r`n" + $err_message;
# Write to application event log
New-EventLog –LogName Application –Source “Order pipeline Script”
Write-EventLog –LogName Application –Source “Order pipeline Script” –EntryType Error –EventID 1 –Message $log_message
}}
我在 Web 应用程序中记录了异常,因此当出现异常时,我注意到任务仍在运行,因此我不得不强制停止它。这不是我真正想在生产系统上做的事情。
如果被调用的程序遇到异常,如何强制停止任务?
我在 powershell 脚本中做的一件事是使用 try
答案1
如果被调用的程序遇到异常,如何强制停止任务?
根据你在问题中提供的逻辑,你可以放置一个休息在抓住块来告诉脚本在引发异常时停止执行。
示例语法
try
{
$order_api = "http://dev-server.testserver.com/api/orderpipeline/Runfolder";
$order_response = Invoke-WebRequest -Uri $order_api -UseDefaultCredentials -ContentType "application/json" -Method Post -Body $jsonParams -TimeoutSec 10000;
}
catch
{
# Capture exception detail
$err_message = $_.Exception | format-list -force | Out-String;
$log_message = $PSCommandPath + "`r`n" + " Something went wrong trying to invoke web request api, exception follows: " + "`r`n" + $err_message;
# Write to application event log
New-EventLog –LogName Application –Source “Order pipeline Script”
Write-EventLog –LogName Application –Source “Order pipeline Script” –EntryType Error –EventID 1 –Message $log_message
break
}