Azure Выпуск Runbook - PullRequest
       22

Azure Выпуск Runbook

0 голосов
/ 10 марта 2020

Я включил свой код ниже ... Все, что я пытаюсь сделать, это l oop этот runbook через определенные c подписки в нашей среде Azure и заставить его отчитываться о резервных копиях, выполненных в этих подписках , При тестировании в Powershell ISE все работает отлично. В runbook'ах нет, это также не дает мне никаких ошибок, так что понятия не имею, что происходит .... Пожалуйста, ПОМОГИТЕ!

$connectionName = "AzureRunAsConnection"

try{
    #Getting the service principal connection "AzureRunAsConnection"
    $servicePrincipalConnection = Get-AutomationConnection -name $connectionName

    "Logging into Azure..."
    Add-AzAccount -ServicePrincipal -TenantID $servicePrincipalConnection.TenantID -ApplicationID $servicePrincipalConnection.ApplicationID -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

}
catch{
    if(!$servicePrincipalConnection){
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    }else {
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

if($err) {
throw $err
}

Import-Module Az.Accounts

function Send-Email() {

    Write-Output "Sending an email"
    $Username ="mymailaccount@azure.com" # Your user name - found in sendgrid portal
    $Password = ConvertTo-SecureString "password" -AsPlainText -Force # SendGrid Password
    $credential = New-Object System.Management.Automation.PSCredential $Username, $Password
    $SMTPServer = "smtp.sendgrid.net"
    $EmailFrom = "Emailfrom" # Can be anything - aaa@xyz.com
    $EmailTo = "EmailTo" # Valid recepient email address
    $Subject = "Azure Audit Report"
    $Body = "Summary as of: " + (Get-Date -Format G) + " UTC"+ "`n`n" + ($Data | Out-String)


    Send-MailMessage -smtpServer $SMTPServer -Credential $credential -Usessl -Port 587 -from $EmailFrom -to $EmailTo -subject $Subject -Body $Body -Attachments $filename

}

$Data = @()

"Selecting Subscriptions.."
$AzureSubscriptions = Get-AzSubscription | Where-Object -Property name -Match "TheOne"

"Looping Through Subscriptions..."

foreach($Subscription in $AzureSubscriptions) #Loop through all Subscriptions
    {
    Select-AzSubscription -SubscriptionObject $Subscription
    $RSVaults = Get-AzRecoveryServicesVault | ?{$_.Name -notin @($ExcludeVault)}#Get Backup Vaults 

        foreach($Vault in $RSVaults)
        {
        Set-AzRecoveryServicesVaultContext -Vault $Vault
            #Process each Vault
        $DebugPreference = 'Continue'
        Get-AzRecoveryServicesBackupJob 5>"$($FolderPath)\Debug.log" | %{  $Data +=   [PSCustomObject]@{
                                                                                Subscription = $Subscription.Name
                                                                                Vault = $Vault.Name
                                                                                VMName = $_.WorkloadName
                                                                                StartTime = $_.StartTime
                                                                                EndTime = $_.EndTime
                                                                                Duration = $_.Duration
                                                                                Status =  $_.Status
                                                                                                            }
                                                                               }


        #MARS Agent backup , currently only works with Debug info - Should be supported in the Future
        $D_i = 0 #Debug Object set
        $D_Obj = @{Subscription = $Subscription.Name
                   Vault = $Vault.Name
                   VMName = ''
                   StartTime = ''
                   EndTime = ''
                   Duration = ''
                   Status =  ''
                  }
        Foreach ($str in @(Get-Content .\Debug.log))
                {
                $a_Str = (($str.Replace('"','').replace(",","").trim()) -split ' ')[1]
                    If ($str -like '*"jobType": "MabJob",*')
                        {$D_i = 1}

                    If ($Str -like '*"duration":*' -and $D_i -eq 1)
                        {$D_Obj.'Duration' =  $a_Str}

                    If ($Str -like '*"mabServerName":*' -and $D_i -eq 1)
                        {$D_Obj.'VMName' =  $a_Str}

                    If ($Str -like '*"status":*' -and $D_i -eq 1)
                        {$D_Obj.'Status' =  $a_Str}

                    If ($Str -like '*"startTime":*' -and $D_i -eq 1)
                        {$D_Obj.'StartTime' =  [datetime]$a_Str}   

                    If ($Str -like '*"endTime":*' -and $D_i -eq 1)
                        {$D_Obj.'EndTime' =  [datetime]$a_Str

                        $Data  += [pscustomobject]$D_Obj

                        $D_i = 0
                        #Reset the Object
                        $D_Obj = @{Subscription = $Subscription.Name
                           Vault = $Vault.Name
                           VMName = ''
                           StartTime = ''
                           EndTime = ''
                           Duration = ''
                           Status =  ''
                           }
                        }  

                  }


        }
    }


#Region HTML Report
$css = @"
<Title>Azure Backup Report: $(Get-Date -Format 'dd MMMM yyyy' )</Title>
<Style>
th {
    font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica,
    sans-serif;
    color: #FFFFFF;
    border-right: 1px solid #C1DAD7;
    border-bottom: 1px solid #C1DAD7;
    border-top: 1px solid #C1DAD7;
    letter-spacing: 2px;
    text-transform: uppercase;
    text-align: left;
    padding: 6px 6px 6px 12px;
    background: #5F9EA0;
}
td {
    font: 11px "Trebuchet MS", Verdana, Arial, Helvetica,
    sans-serif;
    border-right: 1px solid #C1DAD7;
    border-bottom: 1px solid #C1DAD7;
    background: #fff;
    padding: 6px 6px 6px 12px;
    color: #6D929B;
}
</Style>
"@

[string]$FileName = "AzureBackupReport$(Get-date -f ddMMyyyy).html"
$Report = $Data | ConvertTo-Html -Head $css; $Report |Out-File "$filename"


"Done."


Send-Email

1 Ответ

0 голосов
/ 07 апреля 2020

Привет, Zetpil SkullPirate,

Когда вы выполняете скрипт как Azure Runbook автоматизации, я предлагаю вам сохранить " AzureBackupReport $ (Get-date -f ddMMyyyy). html "файл в $ env: temp , а также для отправки электронной почты, я предлагаю вам использовать командлет Invoke-RestMethod вместо командлета Send-MailMessage, потому что согласно this Azure document Подход к командлету Invoke-RestMethod предлагается использовать для отправки электронной почты из Azure Runbook Automation. В том же документе Azure также есть примерный список заданий для справки, поэтому я предлагаю вам проверить его в качестве справочного материала. Надеюсь, это поможет!

...