Azure 자동화의 PowerShell 워크 플로에서 ForEach 루프를 중단하려면 어떻게합니까?Azure 워크 플로에서 ForEach 루프 깨기
추가 정보 :
나는 첨부 된 데이터 디스크를 통해 루프 푸른 자동화에서 VM 복구 runbook 있습니다. 각 VHD의 blobcopy 백업의 이름은 배열을 사용하여 runbook에 입력되고 복원 할 현재 데이터 디스크와 일치됩니다.
백업의 이름은 다음 형식으로되어 있습니다 : MM-DD-YYYY - BlobName.vhd
예 :
데이터 디스크 이름 : TestDisk는-1.vhd
백업 이름 : 12
$dataDisksRestored = 0
ForEach ($vmDataDisk in $vmDataDisks) {
$vmDataDiskName = $vmDataDisk.DiskName
$vmDataDiskuris = $vmDataDisk.MediaLink
$vmDataBlobName = $vmDataDiskuris.Segments[-1]
$vmDataOrigContainerName = $vmDataDiskuris.Segments[-2].Split('/')[0]
$attached = $false
While ($attached -eq $False) {
if ((Get-AzureDisk -DiskName $vmDataDiskName).AttachedTo) {
Write-Output "Sleeping for 5"
Start-Sleep 5
} else {
$attached = $true
}
}
$dataDiskBlobBackupName = $null
ForEach ($backupName in $vmDataDisksBackupNames) {
$b = $backupName.Split('-')[-1]
Write-Output $b
Write-Output $vmDataBlobName
if ($b.CompareTo($vmDataBlobName) -eq 0) {
$dataDiskBlobBackupName = $backupName
break # <- *** Break here if the names match ***
}
}
#Remove-AzureDisk -DiskName $vmDataDiskName –DeleteVHD
#Start-AzureStorageBlobCopy -SrcContainer $backupContainerName -SrcBlob $dataDiskBlobBackupName -DestContainer $vmDataOrigContainerName -DestBlob $vmDataBlobName –Force
#Get-AzureStorageBlobCopyState -Container $vmDataOrigContainerName -Blob $vmDataBlobName –WaitForComplete
#Add-AzureDisk -DiskName $vmDataDiskName -MediaLocation $vmDataDiskuris.AbsoluteUri
$dataDisksRestored++
}
: - -22-2014 TestDisk는-1.vhd
각 데이터 디스크 코드의이 작품에 대한이 실행되고 0
이해가 오류가 있습니다 : 나는 $ dataDiskBlobBackupName가 실행 코드 블록의 나머지 부분을 방지 할 수 있습니다 여전히 null의 경우 확인하기 위해 검사를 추가 생각
Runbook definition is invalid. Break and Continue statements are not supported in a Windows
PowerShell Workflow. Instead, use an 'if' statement to control loop execution.
하지만 것이다 배열의 나머지 부분을 통해 여전히 루프 . 루프를 깨는 더 쉬운 방법이 있습니까?
은 저에게 도움이됩니다. 도움을 주셔서 감사합니다. Matt. while 루프는 $ flag와는 작동하지 않았으므로 조정되었습니다. ($ flag -eq $ false -and ($ index -le $ max)) – Ahmad
저는 Azure Automation 서비스에서 일하고 있습니다. 네,이게 제가하는 제안입니다. 루프 내에있는 다른 모든 로직 주위에 if 문 "if ($ flag -eq $ false)"를 배치하여 처음에는 각 루프에 대해 비슷한 것을 사용할 수도 있습니다. – Joe