上周,我使用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."
}
}
答案 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)。这样一来您就不会出错,但是请记住,您不会由此获得结果。