我想使用PowerShell脚本在azure中管理我的blob快照。
我已经有了一个脚本,可以每小时创建一个blob快照。
现在我想创建一个删除旧快照的查询。
如果快照超过5天,则保留当天的最后一个快照。所有超过30天的快照都将被删除。
我该怎么做?
我的代码会在30天后删除所有快照:
foreach ($CloudBlockBlob in $ListOfBlobs)
{
if ($CloudBlockBlob.IsSnapshot)
{
if ($CloudBlockBlob.SnapshotTime.DateTime -le $RetentionTime )
{
$CloudBlockBlob.Delete()
if (!$?) { Write-Host "Snapshot cannot be deleted. Error on Line " + Get-CurrentLineNumber }
}
}
}
答案 0 :(得分:0)
我们可以使用此脚本删除超过5天的快照blob:
$deletetime = [datetime]::today.adddays(-5).tostring('yyyyMMdd')
$StorageAccountName = "jasondisk3"
$StorageAccountKey = "m+kQwLuQZiI3LMoMTyAI8dq4qul4s8fAIHGPMTD/AG2j+TPHBpttq5hXRmTaQ=="
$ContainerName = "jasonvm"
$Ctx = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$ListBlob = Get-AzureStorageBlob –Context $Ctx -Container $ContainerName | Where-Object {$_.ICloudBlob.IsSnapshot -and $_.SnapshotTime -ne $null -and (($_.SnapshotTime.localdatetime).ToString('yyyyMMdd') -lt $deletetime) }
foreach($b in $listblob) {
$b.ICloudBlob.Delete()
}
注意:
此PowerShell将删除该容器中的所有blob且超过5天。
<强>更新强>:
这里有一个删除一天快照并保留最新快照的脚本,请参考:
$deletetime = [datetime]::today.adddays(-1).tostring('yyyyMMdd')
$StorageAccountName = "jasondisk3"
$StorageAccountKey = "m+kQwLuQZiI3LMoMTyAI8K40gkOD+ZaTxxxs8fAIHGPMTD/AG2j+TPHBpttq5hXRmTaQ=="
$ContainerName = "jasonvm"
$Ctx = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$a = Get-AzureStorageBlob -Container $ContainerName -Context $Ctx | select -ExpandProperty name -Unique
foreach($c in $a){$d = $c.split('.')[0]; $e = $d +'*' ; $f = Get-AzureStorageBlob –Context $Ctx -Container $ContainerName -blob $e | Where-Object {$_.ICloudBlob.IsSnapshot -and $_.SnapshotTime -ne $null -and (($_.SnapshotTime.localdatetime).ToString('yyyyMMdd') -eq '20171110') }; $ff = $f[-1];foreach($qq in $f){if($qq -ne $ff){$qq.ICloudBlob.Delete()}} }
您可以对其进行修改以删除其他日期,并在日期中添加foreach
。
希望这会有所帮助:)