当前位置: 首页 > 知识库问答 >
问题:

如何使用PowerShell终止Azure中Blob存储的租约?

万俟鸿波
2023-03-14

如何利用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个答案

陈斌蔚
2023-03-14

租约可能来自虚拟机或其他使用博客存储的设备。因此,手动解除租约可能会导致问题。

话虽如此,以下PowerShell命令应该可以解决问题:

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

如果是VM,您应该会看到以下关于删除磁盘的帖子:无法删除Blob:Blob上当前有租约,并且请求中没有指定租约ID

但是,如果您只是想替换使用给定Blob的每台机器使用的驱动器,则停止VM、释放租约、上传新映像和启动VM似乎可以工作。

桂鑫鹏
2023-03-14
$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资源编写脚本,可以使用如何在Microsoft Azure(PowerShell)中破解ARM对blob存储的锁定租约

燕光熙
2023-03-14

登录到旧门户并导航到虚拟机,然后url的图像选项卡将显示为https://manage.windowsazure.com/@你的名字。onmicrosoft。com#Workspace/VirtualMachineeExtension/images 选择图像,然后选择底部的删除。

然后去你的存储并删除它。

您还可以尝试以下操作,它将删除给定容器的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)

 类似资料:
  • 我在Azure中创建了一个虚拟机,然后将其删除。但是,关联的存储帐户仍然存在。我无法删除存储帐户,因为它包含一个容器,其中包含一个具有无限期租约的Blob。 没有其他东西正在使用此存储帐户。 如何删除此Blob?

  • 在v11SDK. NET中,我能够使用托管标识令牌来访问Azure blob: 现在我想切换到v12 SDK,但不知道如何对BlobServiceClient进行同样的操作。

  • 我正在发布和订阅Azure事件中心,它在存储帐户中的容器中使用blob。消息不使用此存储帐户发布,而是使用另一个存储帐户。 我可以看到租赁状态为“已租赁”的blob。我认为删除它并再次创建它可能会解决这个问题,所以我尝试删除它并创建一个新的。但无法删除。我还尝试破坏租约,但它再次将租约状态设置为“已租赁”。 有什么办法解决这个问题吗?

  • 我想使用Python中的Azure函数将JSON数据作为. json文件上传到Azure存储Blob。 因为我使用的是Azure函数,而不是实际的服务器,所以我不想(也可能无法)在本地内存中创建一个临时文件,并使用Azure blob存储客户端库v2将该文件上载到Azure blob存储。1对于Python(这里有参考链接)。因此,我想为Azure函数使用输出blob存储绑定(这里有参考链接)。

  • 我是Azure Databricks的新手,我的导师建议我在 https://aischool.microsoft.com/en-us/machine-learning/learning-paths/AI-platform-engineering-bootcamps/custom-machine-learning-bootcamp 据我所知,Azure Blob存储还没有设置,因此我运行的代码(以

  • 我有大约6个设置文件(xml或json ),我想存储在Azure中,但在我的Windows客户端应用程序中使用。我计划将它们存储在blob存储中,并使用以下代码下载它们: 设置文件不会经常更改。如何在本地缓存文件,以避免每次下载? 有更好的方法吗?我应该使用的其他Azure服务?