Azure Runbook问题

我在下面包含了我的代码...我要做的就是在我们的Azure环境中通过特定的订阅循环运行本运行手册,并报告这些订阅中执行的备份。在Powershell ISE中对其进行测试时,它可以完美地工作。根本不在运行手册中,它也没有给我任何错误,所以不知道发生了什么...。请帮助!

$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",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
tqh123456 回答:Azure Runbook问题

您好Zetpil SkullPirate,

当您将脚本作为Azure Automation Runbook执行时,建议您将“ AzureBackupReport $(Get-date -f ddMMyyyy).html ”文件保存在 $ env:temp 以及发送电子邮件,我建议您使用 Invoke-RestMethod cmdlet而不是Send-MailMessage cmdlet,因为建议根据this Azure文档使用Invoke-RestMethod cmdlet方法用于从Azure自动化运行手册发送电子邮件。相同的Azure文档还提供了示例运行手册以供参考,因此我建议您检查一下作为参考。希望这会有所帮助!

本文链接:https://www.f2er.com/2670903.html

大家都在问