[Azure]ARM虚拟机整机磁盘快照[3]——清空虚拟机快照
来源:互联网 发布:大连爱知时计 编辑:程序博客网 时间:2024/06/07 19:28
继续上一小节,清空快照比删除某组虚拟机磁盘快照要更容易一些,不需要进行区分或者分区,我们遍历所有虚拟机的磁盘,列出全部快照删除即可,脚本如下:
param( [Parameter(Mandatory = $true)] [string]$SubscriptionName, [Parameter(Mandatory = $true)] [string]$ResourceGroupName, [Parameter(Mandatory = $true)] [string]$VMName)Function PrepareBlobContext($vhdAbsoluteUri){ $StorageAccountName = $vhdAbsoluteUri.Substring(8, $vhdAbsoluteUri.IndexOf(".blob.core.chinacloudapi.cn") - 8); #length of "https://" is 8 $ContainerPathIndex = $vhdAbsoluteUri.IndexOf("blob.core.chinacloudapi.cn/") + 27; $ContainerName = $vhdAbsoluteUri.SubString($ContainerPathIndex, $vhdAbsoluteUri.IndexOf('/', $ContainerPathIndex) - $ContainerPathIndex); $BlobName = $vhdAbsoluteUri.SubString($vhdAbsoluteUri.LastIndexOf('/') + 1); $storageAccount = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName; $storageContext = $storageAccount.Context; $blobClient = $storageContext.Context.StorageAccount.CreateCloudBlobClient(); $blobContainer = $blobClient.GetContainerReference($ContainerName); $blob = $blobContainer.GetBlockBlobReference($BlobName); return $blob;}Function DeleteAllSnapshots($rgName, $vmName){ $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $vmName -WarningAction Ignore; $hasSnapshot = $false; $osDiskUri = $vm.StorageProfile.OsDisk.Vhd.Uri; $blob = PrepareBlobContext $osDiskUri; $osDiskSnapshotList = @(GetSnapshotListByBlob $blob); $osDiskSnapshotPropertiesList = @(GetSnapshotPropertiesList $osDiskSnapshotList $blob); $dataDiskSnapshotLists = @(); $dataDiskSnapshotPropertiesLists = @(); foreach($dataDiskUri in $vm.StorageProfile.DataDisks.Vhd.Uri) { $blob = PrepareBlobContext $dataDiskUri; $dataDiskSnapshotList = @(GetSnapshotListByBlob $blob); if ($dataDiskSnapshotList.Count -gt 0) { $hasSnapshot = $true; } $dataDiskSnapshotPropertiesList = @(GetSnapshotPropertiesList $dataDiskSnapshotList $blob); $dataDiskSnapshotLists += $null; $dataDiskSnapshotLists[$dataDiskSnapshotLists.Count - 1] = $dataDiskSnapshotList; $dataDiskSnapshotPropertiesLists += $null; $dataDiskSnapshotPropertiesLists[$dataDiskSnapshotPropertiesLists.Count - 1] = $dataDiskSnapshotPropertiesList; } if ($osDiskSnapshotList.Count -eq 0 -and !$hasSnapshot) { Write-Host "Virtual Machine has no snapshots." -ForegroundColor Yellow; return; } Write-Host "The following snapshots will be deleted:" -ForegroundColor Yellow; foreach ($osDiskSnapshotProperties in $osDiskSnapshotPropertiesList) { Write-Host ("{0}({1})" -f $osDiskSnapshotProperties.SnapshotUri, $osDiskSnapshotProperties.SnapshotTime) -ForegroundColor Red; } foreach ($dataDiskSnapshotPropertiesList in $dataDiskSnapshotPropertiesLists) { foreach ($dataDiskSnapshotProperties in $dataDiskSnapshotPropertiesList) { Write-Host ("{0}({1})" -f $dataDiskSnapshotProperties.SnapshotUri, $dataDiskSnapshotProperties.SnapshotTime) -ForegroundColor Red; } } If ($PSCmdlet.ShouldContinue("Confirm?", "=== Confirm delete Opeartion ===")) { foreach ($osDiskSnapshot in $osDiskSnapshotList) { $osDiskSnapshot.Delete(); } foreach ($dataDiskSnapshotList in $dataDiskSnapshotLists) { foreach ($dataDiskSnapshot in $dataDiskSnapshotList) { $dataDiskSnapshot.Delete(); } } Write-Host "Done"; } else { Write-Host "Canceled"; }}Function GetSnapshotListByBlob($blob){ return $blob.Container.ListBlobs($blob.Name, $true, "Snapshots") | Where {$_.SnapshotTime -ne $null};}Function GetSnapshotPropertiesList($Snapshots, $blob){ $Index = 0 $SnapshotPropertiesList = @() Foreach($Snapshot in $Snapshots) { $Index++ $SnapshotPropertiesList += [PSCustomObject]@{ID = $Index BlobName = $blob.Name SnapshotTime = $Snapshot.SnapshotTime SnapshotUri = $Snapshot.Uri} } return $SnapshotPropertiesList;}#$Cred = New-Object System.Management.Automation.PSCredential("XXXXXXXX@XXXXXXXX.partner.onmschina.cn", (ConvertTo-SecureString "XXXXXXXX" -AsPlainText -Force));#[void](Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $Cred);[void](Select-AzureRmSubscription -SubscriptionName $SubscriptionName);DeleteAllSnapshots $ResourceGroupName $VMName;
调用方法:
PS> &.\[ARM]delete_all_snapshots_for_VM.ps1 -SubscriptionName <Subscription Name> -ResourceGroupName <Resource Group Name> -VMName <VM Name>
脚本执行结果:
阅读全文
1 0
- [Azure]ARM虚拟机整机磁盘快照[3]——清空虚拟机快照
- [Azure]ARM虚拟机整机磁盘快照[4]——从快照还原虚拟机
- [Azure]ARM虚拟机整机磁盘快照[1]——创建快照
- [Azure]ARM虚拟机整机磁盘快照[2]——删除快照
- 虚拟机快照
- [Azure]ARM模式托管磁盘的快照与还原[1]——创建与查看
- [Azure]ARM模式托管磁盘的快照与还原[2]——删除与恢复
- 虚拟机磁盘快照(vhd格式)
- Hyper-V 3 虚拟机快照
- [Azure]使用Powershell为ASM虚拟机创建快照
- vmware使用虚拟机快照
- xen虚拟机快照
- KVM虚拟机快照
- KVM虚拟机快照备份
- kvm虚拟机快照备份
- 虚拟机 snap 快照
- 关于虚拟机快照
- kvm+libvirt虚拟机快照
- MFC基于对话框的工具栏定制效果
- 522. Longest Uncommon Subsequence II
- python 单元测试 -- unittest
- Andoird仿IOS滚轮选择控件
- shell 远程启动flume
- [Azure]ARM虚拟机整机磁盘快照[3]——清空虚拟机快照
- Java SE 6.0新特性体验(下篇)
- 欢迎使用CSDN-markdown编辑器
- 303. Range Sum Query
- Redis实战之Win7 64 + VS2013 + Redis 3.0 订阅和发布
- jdk 源码分析(17)java Semaphore 源码解析及与lock对比
- 如何减少访问磁盘的次数,减少访问磁盘的次数
- IO流--将单级文件夹下的文件复制到目标文件夹下,并重命名所有文件
- Linux fedora中安装Parallels Tools