Я думаю, с точки зрения PowerShell, это перехватит и отобразит возникшее исключение:
try {
$Excel = New-Object -ComObject "Excel.Application"
$Excel.DisplayAlerts = $false
$Excel.AskToUpdateLinks = $false
$Excel.Visible = $true
$Workbook = $Excel.Workbooks.Open($excelDataPath)
$Excel.Run("Macro1")
$Workbook.Save()
$Workbook.Close($true)
$Excel.Close()
}
catch {
$exception = $_.Exception
while ($exception.InnerException) {
$exception = $exception.InnerException
}
# Throw a terminating error.
throw $exception
}
finally {
# IMPORTANT! Always release the comobjects used from memory when done
if ($Workbook) { [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook) | Out-Null }
if ($Excel) { [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) | Out-Null }
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
Однако, что касается макрокода VBA, который вы нам не показывали, вам придетсяпроверьте, что он делает с любыми ошибками через VBA On Error Error .Особенно заявления Err.Raise
и Throw
.