版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qwertyupoiuytr/article/details/78204848
Azure ARM模式下提供了托管磁盘这种磁盘管理方式,虚拟机不用了之后删除掉,磁盘会残留下来造成资源浪费,可以使用下面的脚本进行批量清理。
脚本调用 Invoke-Parallel 来实现并发操作,提高清理效率。内容和思路比较简单,脚本内容如下:
$scriptSrc = "http://danielnorthstorage.blob.core.chinacloudapi.cn/fordownload/Invoke-Parallel.ps1";
$dest = ".\tmpScript.ps1";
$wc = New-Object System.Net.WebClient;
$wc.DownloadFile($scriptSrc, $dest);
# import the functions in the script file
. ".\tmpScript.ps1";
$subscriptions = Get-AzureRmSubscription;
foreach($subscription in $subscriptions)
{
if ($subscription.State -eq "Disabled")
{
continue;
}
Write-Host ("Subscription : {0}" -f $subscription.SubscriptionName);
[void](Select-AzureRmSubscription -SubscriptionName $subscription.SubscriptionName);
$disks = Get-AzureRmDisk;
$unUsedDisks = $disks | where {$_.OwnerId -eq $null};
Write-Host "Remove managed disks:";
foreach ($unUsedDisk in $unUsedDisks)
{
Write-Host ("Removing managed disk {0}(ResourceId:{1})" -f $unUsedDisk.Name, $unUsedDisk.Id);
}
$unUsedDisks | Invoke-parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock { [void](Remove-AzureRmDisk -ResourceGroupName $_.ResourceGroupName -DiskName $_.Name -Force); };
}
Remove-Item -Path ".\tmpScript.ps1";
测试下来运行效率挺高,7个订阅下的100多块未使用的托管磁盘2分钟左右就清理干净了。调用的时候遇到 Invoke-Parallel 方法调用报错,有几块磁盘没有清理掉,等执行完了再执行一次清理掉残留的就好了。