Вывод тишины из команд Azure SQL Powershell - PullRequest
1 голос
/ 23 октября 2019

У меня есть скрипт Powershell, чтобы скопировать нашу производственную базу данных в нашу тестовую среду, а также связанные действия по очистке. Я хотел бы очистить информацию, выводимую для пользователя на консоль, и у меня возникли проблемы с поиском очистки сообщений об ошибках, которые я получаю из своих команд Az.sql.

Одним из моих первых действий являетсяпопытаться выяснить, существует ли временная база данных и нужно ли ее очистить

#clean up existing
$availableDatabase = Get-AzSqlDatabase -ResourceGroupName $TestResourceGroup -ServerName $TestServerName -DatabaseName $TestTempDatabaseName

Если ее нет, я получу в консоли следующую ошибку:

Remove-AzSqlDatabase : The Resource 
'Microsoft.Sql/servers/xxxx/databases/reap_prod_copy_2' under resource group 'xxxx' was not found.
At C:\Users\xxxx\Desktop\reap-replace-test.ps1:17 char:1
+ Remove-AzSqlDatabase -ResourceGroupName $TestResourceGroup -ServerNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : CloseError: (:) [Remove-AzSqlDatabase], CloudException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Sql.Database.Cmdlet.RemoveAzureSqlDatabase

Iхотел бы захватить этот вывод и вместо этого предоставить простое сообщение «Не существует», или даже просто полностью перейти без вывода. Я попытался поставить "| Out-Null" в конце, но это никак не влияет на вывод. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вам просто нужно использовать оператор if(){}else{}, попробуйте скрипт, как показано ниже, он отлично работает на моей стороне.

$availableDatabase = Get-AzSqlDatabase -ResourceGroupName $TestResourceGroup -ServerName $TestServerName -DatabaseName $TestTempDatabaseName -ErrorAction SilentlyContinue
if ($availableDatabase){

    Remove-AzSqlDatabase -ResourceGroupName $TestResourceGroup -ServerName $TestServerName -DatabaseName $TestTempDatabaseName
    Write-Host "Remove the sql db" $TestTempDatabaseName

}else{
    Write-Host "The sql db" $TestTempDatabaseName "does not exist" 

    }

Результат теста:

enter image description here

enter image description here

0 голосов
/ 23 октября 2019

Вы можете использовать блок try catch для захвата исключения.

try {
    #clean up existing
    $availableDatabase = Get-AzSqlDatabase -ResourceGroupName $TestResourceGroup -ServerName $TestServerName -DatabaseName $TestTempDatabaseName
} 
catch {
    Write-Host "Does not exist"
    $availableDatabase = $null
}

if ($availableDatabase -ne $null) {
    # ... Do stuff with database
}

Выше все выполнит все в блоке try, и если он обнаружит ошибку любого типа, он выполнит все вблок catch. Оператор if может или не может быть необходимым в зависимости от реализации.

См. about_Try_Catch_Finally

Примечание: Приведенный выше блок catch будетcatch любая ошибка, независимо от того, была ли она вызвана отсутствующей таблицей или нет. Как правило, рекомендуется по возможности включать конкретный тип исключения после catch, чтобы избежать заглушения несвязанных ошибок, которые, возможно, потребуется исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...