0

The below given PowerShell Script Basically Checks for Backup Jobs inside Backup Vault and Sends a daily backup job report to emails mentioned. I am Facing issues as the script throws an error Invoke-RestMethod : The request was aborted: Could not create SSL/TLS secure channel I am using SendGrid Api Key in a Kv used for the mailing service. Have tried adding an updated TLS Version too it still throws the same error.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Remove-Variable -Name * -ErrorAction SilentlyContinue
$numberofdays = 2
$DAILYBACKUPSTATS = @() 
$DAILYBACKUPSTATS1 = @()
$DAILYBACKUPSTATSFAILED = @()
$DAILYBACKUPSTATSFAILED1 = @()
$Subscriptions = Get-AzSubscription 
$SubscriptionIDs = $Subscriptions.ID  

foreach ($SubscriptionID in $SubscriptionIDs) {
    $Subscription = Set-AzContext -SubscriptionId $SubscriptionID
    $backupvaults = Get-AzRecoveryServicesVault 
    $backupvaultnames = $backupvaults.name 

    foreach ($backupvaultname in $backupvaultnames)
    {
        $backupvault = Get-AzRecoveryServicesVault -Name $backupvaultname
        $startdate = [system.Datetime]::UtcNow
        $enddate = ([system.Datetime]::UtcNow).AddDays(1)

        for ( $i = 1; $i -le $numberofdays; $i++ ) { 
            # We query one day at a time 
            $dailyjoblist = Get-AzRecoveryServicesBackupJob -VaultId $backupvault.ID  -From $startdate -To $enddate -Operation Backup;
            
            foreach ( $job in $dailyjoblist ) { 
                #Extract the information for the reports 
                $message.Body
                $newstatsobj = New-Object System.Object 
                $newstatsobj | Add-Member -type NoteProperty -name Subscription -value (Get-AzSubscription -SubscriptionId $SubscriptionID).Name
                $newstatsobj | Add-Member -type NoteProperty -name Date -value $job.StartTime 
                $newstatsobj | Add-Member -type NoteProperty -name RecoveryVaultName -value $backupvaultname
                $newstatsobj | Add-Member -type NoteProperty -name VMName -value $job.WorkloadName 
                $newstatsobj | Add-Member -type NoteProperty -name Duration -value $job.Duration 
                $newstatsobj | Add-Member -type NoteProperty -name Status -value $job.Status
                $details = Get-AzRecoveryServicesBackupJob -VaultId $backupvault.ID -Job $job 
                $DAILYBACKUPSTATS += $newstatsobj 
            }

            $enddate = $enddate.AddDays(-1) 
            $startdate = $startdate.AddDays(-1)

            #Sets the columns 
            $a = "<style>" 
            $a = $a + "BODY{background-color:white;}"
            $a = $a + "TABLE{border-width: 3px;border-style: double;border-collapse: collapse;font-family: Calibri;}" 
            $a = $a + "TH{border-width: 3px;padding: 2px;border-style: double;background-color:SandyBrown;font-family: Calibri;}" 
            $a = $a + "TD{border-width: 3px;padding: 2px;border-style: double;font-family: Calibri;}" 
            $a = $a + "</style>"

        }
    }
}
$DAILYBACKUPSTATS += $DAILYBACKUPSTATS1
$EmailBody = "<table width='70%'><tbody>"
$EmailBody += "<tr>"
$EmailBody += "<td width='100%' colSpan=4><font face='Calibri' color='#003399' size='3'>Azure Recovery Services Vault Backup Job Status<BR>NOTE: Date is UTC<BR><BR>"
$EmailBody += "</tr>"
$EmailBody += "</table>"

$message1 = $DAILYBACKUPSTATS | ConvertTo-Html -Head $a 
$EmailBody += $message1

$content  = $emailBody


$VaultName = "Parent-kv"
$SENDGRID_API_KEY = (Get-AzKeyVaultSecret -VaultName $VaultName -Name "Sendgrd-api").SecretValue
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer " + $SENDGRID_API_KEY)
$headers.Add("Content-Type", "application/json")
$destEmailAddress = "jon@mail.com"
$fromEmailAddress = "Azure-NoReply@cla.com"

$body = @{
personalizations = @(
    @{
        to = @(
                @{
                    email = $destEmailAddress
                }
        )
    }
)
from = @{
    email = $fromEmailAddress
}
subject = $subject
content = @(
    @{
        type = "text/html"
        value = $content
    }
)
}

$bodyJson = $body | ConvertTo-Json -Depth 4

$response = Invoke-RestMethod -Uri https://api.sendgrid.com/v3/mail/send -Method Post -Headers $headers -Body $bodyJson

ferj
  • 101
  • 1
  • 7

1 Answers1

0

You can most likely search here for a whole bunch of potential remedies.

The request was aborted: Could not create SSL/TLS secure channel

I would also recommend to:

  • verify that the credentials ($SENDGRID_API_KEY) is correct.
  • run a network sniffer to see the SSL handshake and see if there any exceptions.
Dan
  • 106
  • 4