如何使用PowerShell打破Azure中的Blob存储租约?

时间:2016-03-10 15:55:15

标签: azure azure-storage azure-storage-blobs azure-powershell

如何使用PowerShell打破Blob存储中项目的租约?

我尝试在当前图片上上传内容时收到以下内容:

Add-AzureRmVhd : The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request..
At line:1 char:1
+ Add-AzureRmVhd -Destination $osDiskUri -LocalFilePath $localFileName  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Add-AzureRmVhd], StorageException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.StorageServices.AddAzureVhdCommand

3 个答案:

答案 0 :(得分:6)

登录旧门户并导航至虚拟机,然后导航至图片标签,网址将为https://manage.windowsazure.com/@yourname.onmicrosoft.com#Workspaces/VirtualMachineExtension/images.选择图片并选择删除在底部。

enter image description here

之后转到存储并删除它。

您还可以尝试以下操作,删除给定容器的blob,然后删除容器。

Add-AzureAccount
Get-AzureSubscription | Format-Table SubscriptionName, IsDefault, IsCurrent, CurrentStorageAccountName

$SubscriptionName = 'Your subsscription name'
Select-AzureSubscription -SubscriptionName $SubscriptionName

Get-AzureSubscription -Default

Get-AzureStorageAccount | Format-Table -Property StorageAccountName, Location, AccountType, StorageAccountStatus

$StorageAccountName = "Your storage account"
$StorageAccountKey = (Get-AzureStorageKey -StorageAccountName $StorageAccountName).Primary
$ContainerName = "Your container name"
$Context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey

#Get a reference to all the blobs in the container.
$blobs = Get-AzureStorageBlob -Container $ContainerName -Context $Context

#Remove lease on each Blob
$blobs | %{$_.ICloudBlob.BreakLease()}

#Delete blobs in a specified container.
$blobs| Remove-AzureStorageBlob

Remove-AzureStorageContainer -Container $ContainerName -Context $Context

如果你想破坏blob上的封印,你可以使用How to break the locked lease of blob storage in Microsoft Azure (PowerShell)

答案 1 :(得分:2)

租约很可能来自虚拟机,或使用博客存储的其他东西。因此,手动释放租约可能会导致问题。

说到这一点,以下PowerShell命令应该可以解决这个问题:

Get-AzureRmStorageAccount -Name "STORAGE_ACCOUNT_NAME" | Get-AzureStorageBlob -name "CONTAINER_NAME").ICloudBlob.BreakLease()

如果是VM,您应该在删除磁盘时看到以下帖子: Cannot delete blob: There is currently a lease on the blob and no lease ID was specified in the request

但是,如果您只想更换使用给定blob的每台计算机使用的驱动器,则停止VM,释放租约,上传新映像以及启动VM似乎都有效。

答案 2 :(得分:2)

$key = (Get-AzureRmStorageAccountKey -ResourceGroupName $selectedStorageAccount.ResourceGroupName -name $selectedStorageAccount.StorageAccountName -ErrorAction Stop)[0].value 
        $storageContext = New-AzureStorageContext -StorageAccountName $selectedStorageAccount.StorageAccountName -StorageAccountKey $key -ErrorAction Stop 
        $storageContainer = Get-AzureStorageContainer -Context $storageContext -Name $ContainerName -ErrorAction Stop 
        $blob = Get-AzureStorageBlob -Context $storageContext -Container  $ContainerName -Blob $BlobName -ErrorAction Stop          
        $leaseStatus = $blob.ICloudBlob.Properties.LeaseStatus; 
        If($leaseStatus -eq "Locked") 
        { 
             $blob.ICloudBlob.BreakLease() 
             Write-Host "Successfully broken lease on '$BlobName' blob." 
        } 
        Else 
        { 
            #$blob.ICloudBlob.AcquireLease($null, $null, $null, $null, $null) 
            Write-Host "The '$BlobName' blob's lease status is unlocked." 
        } 

如果您想要ARM资源的脚本,可以使用 How to break the locked lease of blob storage by ARM in Microsoft Azure(PowerShell)