首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Runbook问题

Azure Runbook问题
EN

Stack Overflow用户
提问于 2020-03-10 22:07:53
回答 1查看 171关注 0票数 0

我已经在下面包含了我的代码...我要做的就是通过Azure环境中的特定订阅循环执行此runbook,并让它报告在这些订阅中执行的备份。当在Powershell ISE中测试它时,它工作得非常好。在runbooks中根本不会,它也不会给我任何错误,所以不知道发生了什么……请帮帮我!

代码语言:javascript
复制
$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
EN

回答 1

Stack Overflow用户

发布于 2020-04-08 01:00:30

当你作为Azure Automation runbook执行脚本时,我建议你将AzureBackupReport$(Get-date -f ddMMyyyy).html文件保存在$env:temp中,并发送电子邮件,我建议你使用Invoke-RestMethod cmdlet而不是Send-MailMessage cmdlet,因为根据this Azure document Invoke-RestMethod cmdlet方法,建议使用cmdlet方法从Azure自动化runbook发送电子邮件。

同样的Azure文档也有一个示例runbook供参考,因此我建议您查看它作为参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60619299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档