Обработка ошибок в PowerBI RestAPI в PowerShell - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать автоматизированную систему электронной почты, когда мои API-интерфейсы PowerBI rest обнаруживают ошибку в PowerShell. По сути, мой PowerBI RestAPI иногда выдает следующую ошибку:

enter image description here

И всякий раз, когда он выдает эту ошибку, я хочу, чтобы мой сценарий PowerShell отправлял мне Эл. адрес. В настоящее время я тестирую следующий код, но он совсем не работает. В идеале, когда ошибка возникает для приведенного ниже кода, он должен печатать «Ошибка». Вместо этого он просто выводит ошибку и останавливается. Мне интересно, есть ли у кого-нибудь опыт обработки ошибок с помощью API-интерфейсов PowerBI rest.

$User = "email@hotmail.com"
$PW = "mypw"

$SecPasswd = ConvertTo-SecureString $PW -AsPlainText -Force
$myCred = New-Object System.Management.Automation.PSCredential($User,$SecPasswd)

Connect-PowerBIServiceAccount -Credential $myCred

# 2. Refresh Dataset
try{
Invoke-PowerBIRestMethod -Url "datasets/2-cdaf123fa5/refreshes" -Method Post -Body '{"notifyOption": "MailOnFailure"}'
}

# 3. Check if there is an error
catch {
            $emailSmtpServer = "smtp.gmail.com"
            $emailSmtpServerPort = "587"
            $emailSmtpUser = "email@gmail.com"
            $emailSmtpPass = "password"

            $emailFrom = "email@gmail.com"
            $emailTo = "email@gmail.com"

            $emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo )
            $emailMessage.Subject = "subject" 
            $emailMessage.Body = "body"

            $SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
            $SMTPClient.EnableSsl = $True
            $SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
            $SMTPClient.Send( $emailMessage )
    }

1 Ответ

1 голос
/ 06 мая 2020

Есть несколько способов справиться с этим. У вас непрекращающаяся ошибка. Вы можете go вернуться к ссылке выше и найти цитаты ниже, если мое решение не соответствует вашим потребностям. 2.0, являются предпочтительным способом обработки прерывающих ошибок. Их нельзя использовать для обработки непрекращающихся ошибок, если только вы не заставите эти ошибки превратиться в прерывающие ошибки с помощью ErrorAction или $ ErrorActionPreference, для которых установлено значение Stop.

Значение Stop приводит к тому, что непрекращающиеся ошибки обрабатываются как завершающие ошибки вместо этого немедленно останавливает выполнение командлета. Это также позволяет вам перехватывать эти ошибки в операторах Try / Catch или Trap, как описано далее в этом разделе.

В верхней части скрипта добавьте

$ErrorActionPreference = "Stop"

I надеюсь, это поможет.

...