1

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 かどうかを確認するチェックを追加すると、コード ブロックの残りの部分が実行されなくなりますが、配列の残りの部分はループします。ループを破る簡単な方法はありますか?

4

1 に答える 1