Azure自动化帐户-Runbook错误-对象引用未设置为对象的实例

时间:2020-02-18 13:18:03

标签: azure azure-automation azure-runbook

上周,我使用New-AzSnapshot cmdlet部署了脚本来备份一些磁盘。 我在Azure自动化帐户中安排了此脚本,并且在开始的前两天,脚本运行良好!

今天,我分析了日志,发现脚本出现以下错误:

Connect-AzAccount:对象引用未设置为对象的实例。在第12行:char:25 + $ connectionResult = Connect-AzAccount`+ ~~~~~~~~~~~~~~~~~~ + CategoryInfo:CloseError:(:) [Connect-AzAccount],NullReferenceException + FullyQualifiedErrorId:Microsoft.Azure.Commands.Profile.ConnectAzureRmAccountCommand

有人知道什么可能导致此错误吗?

脚本下方:

Param(
    [string]$resourceGroupName
)

$connection = Get-AutomationConnection -Name AzureRunAsConnection
while (!($connectionResult) -And ($logonAttempt -le 10)) {
    $LogonAttempt++
    # Logging in to Azure...
    $connectionResult = Connect-AzAccount `
        -ServicePrincipal `
        -Tenant $connection.TenantID `
        -ApplicationID $connection.ApplicationID `
        -CertificateThumbprint $connection.CertificateThumbprint

    Start-Sleep -Seconds 30
}

# Remove old snapshots
$snapshotnames = (Get-AzSnapshot -ResourceGroupName $resourceGroupName).name
foreach($snapname in $snapshotnames)
{
    Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapname | ?{($_.TimeCreated) -lt ([datetime]::UtcNow.AddMinutes(-10080))} | Remove-AzSnapshot -Force
} 

foreach ($VMs in Get-AzVM -ResourceGroupName $resourceGroupName) {  
    #Set local variables 
    $location = $VMs.Location 
    #$resourceGroupName = $vmInfo.ResourceGroupName 
    $timestamp = Get-Date -f MM-dd-yyyy_HH_mm_ss 

    #Snapshot name of OS data disk 
    $snapshotName = "bkp-" + $VMs.Name + "-" + $timestamp 

    #Create snapshot configuration 
    $snapshot = New-AzSnapshotConfig -SourceUri $VMs.StorageProfile.OsDisk.ManagedDisk.Id -Location $location  -CreateOption copy 

    #Take snapshot 
    New-AzSnapshot -Snapshot $snapshot -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName  



    if ($VMs.StorageProfile.DataDisks.Count -ge 1) { 
        #Condition with more than one data disks 
        for ($i = 0; $i -le $VMs.StorageProfile.DataDisks.Count - 1; $i++) { 

            #Snapshot name of OS data disk 
            $snapshotName = "bkp-" + $VMs.StorageProfile.DataDisks[$i].Name + "-" + $timestamp

            #Create snapshot configuration 
            $snapshot = New-AzSnapshotConfig -SourceUri $VMs.StorageProfile.DataDisks[$i].ManagedDisk.Id -Location $location  -CreateOption copy 

            #Take snapshot 
            New-AzSnapshot -Snapshot $snapshot -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName  

        } 
    } 
    else { 
        Write-Host $VMs.Name + " doesn't have any additional data disk." 
    } 
}

1 个答案:

答案 0 :(得分:0)

您有一个nullreference异常,请查看错误消息中的位置(在行:12字符:25)。它表明connection为空。

您需要先在同一页面上声明connection,然后才能使用其中的变量。

另请参阅:What is a NullReferenceException, and how do I fix it?

编辑:第二次通知,我认为您已经在

处声明了$connection
$connection = Get-AutomationConnection -Name AzureRunAsConnection

,但看起来它返回null。在这种情况下,您需要弄清楚为什么它返回null,因为如果连接,它应该返回一个填充的$connection

为了避免错误,进行安全检查:您应该先检查$connection是否不为null,然后再输入while(例如,$connection != null适用于Javascript)。这样一来您就不会出错,但是请记住,您不会由此获得结果。