Azure Automation の PowerShell ワークフローで ForEach ループを中断するにはどうすればよいですか?
追加情報:
接続されたデータ ディスクをループする Azure Automation の VM 復旧 Runbook があります。各 VHD の blobcopy バックアップの名前は、配列を使用して Runbook に入力され、復元される現在のデータ ディスクに一致します。
バックアップの名前は次の形式です: MM-DD-YYYY--BlobName.vhd
例:
データ ディスク名: TestDisk-1.vhd
バックアップ名: 12-22-2014--TestDisk-1.vhd
データ ディスクごとに、次のコードが実行されます。
$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++
}
私が得るエラーは次のとおりです。
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.
$dataDiskBlobBackupName がまだ null かどうかを確認するチェックを追加すると、コード ブロックの残りの部分が実行されなくなりますが、配列の残りの部分はループします。ループを破る簡単な方法はありますか?