Azure PowerShell Runbook Get 动态设置 Az-Disk

Azure PowerShell Runbook Get Set Az-Disk dynamically

团队正在尝试自动执行快照还原,已成功实现。但是我无法弄清楚如何动态获取资源组中的前一个磁盘;以及使用新名称设置下一个磁盘。

在下面的代码中,"AZR-001_OsDisk_7" 必须在下次运行时动态设置为 "AZR-001_OsDisk_8":

$diskConfig = New-AzDiskConfig -Location $snapshot.Location -SourceResourceId $snapshot.Id -CreateOption Copy
$disk = New-AzDisk -Disk $diskConfig -ResourceGroupName "ETD-RFT" -DiskName "AZR-001_OsDisk_7"
$disk1 = Get-AzDisk -ResourceGroupName "ETD-RFT" -Name "AZR-001_OsDisk_7" 

不是最终的解决方案,但我有一个快速的想法。您可以使用 Get-AzDisk -ResourceGroupName 'ResourceGroupName ' 来获取所有磁盘。然后你可以得到磁盘名称。

当你用适当的规则命名磁盘时,你可以将名称字符串拆分为_,然后你将得到一个包含所有部分的字符串数组。通过这种方式,您将能够获得该版本。

样本:

$disks = Get-AzDisk -ResourceGroupName JackVS2019

foreach($disk in $disks){
    $arr = $disk.Name.Split('_')
    Write-Host $arr[2]
}

输出:

1

然后就可以生成新的磁盘名了。

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection = Get-AutomationConnection -Name $connectionName      
    "Logging in to Azure..."
    $account = Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
} 

Select-AzSubscription -SubscriptionName 101-Prototyping

$vm = Get-AzVM -ResourceGroupName "ETD-RFT" -Name "AZR-101-007-001" 

$snapshot = Get-AzSnapshot -ResourceGroupName "ETD-RFT" -SnapshotName "SNAPSHOT-DEC-2019"

$diskConfig = New-AzDiskConfig -Location $snapshot.Location -SourceResourceId $snapshot.Id -CreateOption Copy

$disks = Get-AzDisk -ResourceGroupName "ETD-RFT" 

$attached = $disks | Where-Object ManagedBy -ne $null

foreach($disk in $attached)
{
    $arr = $disk.Name.Split('_')
     $arr[2]

}
$a = $arr[2] -as [int]
$a=$a+1
Write-Host $a

$newname = $arr[0] + "_" + $arr[1] + "_" + $a

$disknew = New-AzDisk -Disk $diskConfig -ResourceGroupName "ETD-RFT" -DiskName $newname

$disk1 = Get-AzDisk -ResourceGroupName "ETD-RFT" -Name $newname 

Set-AzVMOSDisk -VM $vm -ManagedDiskId $disk1.Id -Name $disk1.Name 

Update-AzVM -ResourceGroupName "ETD-RFT" -VM $vm