[Azure]ARM模式下批量清理未使用的托管磁盘

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 方法调用报错,有几块磁盘没有清理掉,等执行完了再执行一次清理掉残留的就好了。


猜你喜欢

转载自blog.csdn.net/qwertyupoiuytr/article/details/78204848