• 创建Azure Blob Snapshot的脚本


    在前面的文章中介绍了如何创建Azure Blob Snapshot。那篇文章中创建的脚本思路是:遍历所有Storage Account,找到所有vhd文件,进行Snapshot的创建。

    但这种方式不够严谨,有可能是已经删除了的VM,不需要再进行Snapshot的创建工作。

    本文将采用获取Subscription下所有VM,如果这台虚拟机是运行状态,就去得到其OS Disk和Data Disk,对其进行创建Snapshot的工作。

    具体的脚本如下:

     1 $vms = Get-AzureVM
     2 foreach ($vm in $vms)
     3 {
     4     if($vm.Status -eq "ReadyRole")
     5     {
     6         $osblobname = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-1]
     7         $osblobcontainer = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-2]
     8         $osblobsa = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-3].Split(".")[0]
     9 
    10         $storagekey = (Get-AzureStorageKey -StorageAccountName $osblobsa).Primary
    11         $ctr = New-AzureStorageContext -StorageAccountName $osblobsa -StorageAccountKey $storagekey -Environment AzureChinaCloud
    12         
    13         $blob = Get-AzureStorageBlob -Container $osblobcontainer -Context $ctr -Blob $osblobname
    14         $blob.ICloudBlob.CreateSnapshot()
    15         #write-host $blob.Name
    16 
    17         $count = $vm.VM.DataVirtualHardDisks.Count
    18     
    19         for($i=0;$i -lt $count;$i++)
    20         {
    21             $datablobname = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-1]
    22             $datablobcontainer = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-2]
    23             $datablobsa = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-3].Split(".")[0]
    24             $storagekey = (Get-AzureStorageKey -StorageAccountName $datablobsa).Primary
    25             $ctr = New-AzureStorageContext -StorageAccountName $datablobsa -StorageAccountKey $storagekey -Environment AzureChinaCloud
    26         
    27             $blob = Get-AzureStorageBlob -Container $datablobcontainer -Context $ctr -Blob $datablobname
    28             $blob.ICloudBlob.CreateSnapshot()
    29             #write-host $blob.name
    30         }
    31     }
    32 }

    测试时,可以把

    $blob.ICloudBlob.CreateSnapshot()

    标注; 

    #write-host $blob.name

    撤销标注。

    如果正确,可以打印所有OS Disk和Data Disk的文件名。

    
    
    
  • 相关阅读:
    博客园定制
    【杂文】久 等 了
    【杂文】随心一记
    NOIP2021游寄
    【python】mac+appium+python的环境配置完整流程
    压力测试平台(nGrinder)入门到精通教程
    Gunicorn启动flask项目
    统计代码测试覆盖率Python
    Android开发Google Pixel、Google Nexus系列手机刷机获取root并且设置ro.debuggable=1的方法
    c宏定义#define、#、##、__VA_ARGS__符号的理解
  • 原文地址:https://www.cnblogs.com/hengwei/p/5156195.html
Copyright © 2020-2023  润新知