Azure PowerShell Runbook动态获取设置Az磁盘

时间:2020-01-02 06:36:25

标签: azure powershell azure-runbook

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

在“ 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" 

2 个答案:

答案 0 :(得分:0)

这不是最终解决方案,但是我有个简单的主意。您可以使用Get-AzDisk -ResourceGroupName 'ResourceGroupName '来获取所有磁盘。然后,您可以获取磁盘名称。

使用适当的规则命名磁盘时,可以用_分割名称字符串,然后将得到一个包含所有部分的字符串数组。这样,您将能够获取版本。

示例:

$disks = Get-AzDisk -ResourceGroupName JackVS2019

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

输出:

1

然后,您可以生成新的磁盘名称。

答案 1 :(得分:0)

$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