PowerShell批量删除Azure存储账户中blob存储中文件的快照

PowerShell批量删除Azure存储账户中blob存储中文件的快照

背景

最近有一客户通过Azure Storage Explorer工具上传文件到Azure的Blob存储,上传过程中因为同一个目录被重复上传了,并且上传时未使用替换选项,而使用了“Create snapshot and replace” ,导致目录中大量文件被创建了快照,而当客户想要删除这些文件或重命名文件夹时报错,提示由于文件包含快照而无法删除的错误。
PowerShell批量删除Azure存储账户中blob存储中文件的快照
PowerShell批量删除Azure存储账户中blob存储中文件的快照

解决方法

由于这些文件被创建了快照,如果想要删除文件夹内的文件和文件夹,则必须先删除这些文件的快照。
通过以下PowerShell命令,可以查找Blob存储账户中对应文件夹下所有包含快照的文件,并删除这些文件的快照。
依照代码中的备注,修改对应位置的的参数。

Import-Module AzureAD
$AdminAccount = "[email protected]"   # 修改引号中Azure管理员账户
$AdminPW = "xxxxxxxx" | ConvertTo-SecureString -AsPlainText -Force   #修改引号中Azure管理员的密码
$credential = New-Object System.Management.Automation.PSCredential($AdminAccount,$AdminPW)
Login-AzureRmAccount -EnvironmentName azurechinacloud -Credential $credential

$resourceGroupName = ""     # 引号中输入存储账户所在的资源组 
$storagename=""             # 引号中输入账户名称
$containersname=""          # 引号中输入容器名称

$storageaccount = Get-AzurermStorageAccount -StorageAccountName $storagename -ResourceGroupName $resourceGroupName
$context = $storageaccount.Context

# 修改引号中的要列出的文件夹的位置,不然会搜索列出整个容器中所有包含快照的文件存在。
# 因为是删除操作,所以请谨使用!!!!
Get-AzureStorageBlob -Container $containersname -Context $context -Blob "xx目录/*" | Where-Object {$_.SnapshotTime -ne $null} | Remove-AzureStorageBlob

因为是删除操作,生产使用,请谨慎,谢谢。