Мы используем модуль Runbook PowerShell для службы автоматизации Azure для обслуживания Azure Sql, как описано в https://www.2azure.nl/2020/07/28/how-to-use-azure-automation-to-maintain.-sql-indexes-and-statistics/ (и в сбой модуля Runbook Powersell в службе автоматизации Azure: 'Invoke-Sqlcmd' не распознается как имя командлета, ответ)
$SQLOutput = $(Invoke-Sqlcmd -ServerInstance $AzureSQLServerName
-Username $Cred.UserName -Password $Cred.GetNetworkCredential().Password
-Database $AzureSQLDatabaseName -Query $sql
-QueryTimeout 65535 -ConnectionTimeout 60 -Verbose) 4>&1
Write-Output $SQLOutput
Но мы обнаружили, что в случае ошибки (в частности, когда имя пользователя было неправильным) задание завершалось успешно, даже если ошибка была записана в выводе. Означает ли это, что подвыражение $ (команда) автоматически перехватывает исключения? Он не упоминается в https://ss64.com/ps/syntax-operators.html а>.
Другая проблема с сохранением подвыражения в $ SQLOutput заключается в том, что мы можем видеть вывод только после завершения $ (Invoke-Sqlcmd), а не во время процесса. Если $ (Invoke-Sqlcmd) занимал более 3 часов, задание останавливалось Azure, и мы не могли видеть, что было обработано, а что нет.
Должен ли я вообще не использовать подвыражение и напрямую вызывать Invoke-Sqlcmd?
Invoke-Sqlcmd -ServerInstance $AzureSQLServerName
-Username $Cred.UserName -Password $Cred.GetNetworkCredential().Password
-Database $AzureSQLDatabaseName -Query $sql
-QueryTimeout 65535 -ConnectionTimeout 60 -Verbose) 4>&1
Будет ли у него какие-то недостатки по сравнению с подвыражением?