2

この記事 ( http://www.coreazure.com/snapshot-vms-in-azure-2/ ) に従って、Azure portal から powershell(PS) を使用して VM のスナップショットを作成しようとしています。これは、スナップショットを作成するために作成した PS スクリプトです。

workflow snapshot1
{
   $subName = 'XYZ'

   $cred = Get-AutomationPSCredential -Name "xyz@xyzgmail.onmicrosoft.com" 

   Add-AzureAccount -Credential $cred
   Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount 'storagename'

   $serviceName = "a1smallvm"
   $vm = Get-AzureVM –ServiceName $serviceName –Name "a1smallvm"
   $storageContainer = "backups"

   InlineScript {
      # Create a storage for putting the backups of OSDisk & DataDisks 
      New-AzureStorageContainer -Name $Using:storageContainer -Permission off

      # Stop VM if running
      $Using:vm | Stop-AzureVM -StayProvisioned

      $vm = Get-AzureVM –ServiceName $Using:serviceName –Name "a1smallvm"

      $vmOSDisk = $vm | Get-AzureOSDisk
      $vmDataDisks = $vm | Get-AzureDataDisk
      Write-output "OSDisk: $vmOSDisk"
      $storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0]
      Write-output "Data Disk: $vmDataDisks"
      Write-output "StorageAccountName: $storageAccountName"

      $vmOSBlobName = $vmOSDisk.MediaLink.Segments[-1]

      $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-1].Split(‘/’)[0]

      Write-output "vmOSBlobName: $vmOSBlobName"
      Write-output "vmOSContainerName: $vmOSContainerName"

      # Backup the osblob and oscontainer
      Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer

      Get-AzureStorageBlobCopyState -Container $Using:storageContainer -Blob $vmOSBlobName -WaitForComplete

      # Backup the dataBlob and dataContainer
      ForEach ($vmDataDisk in $vmDataDisks) {

        $vmDataBlobName = $vmDataDisk.MediaLink.Segments[-1]

        $vmDataContainerName = $vmDataDisk.MediaLink.Segments[-2].Split(‘/’)[0]

        Start-AzureStorageBlobCopy -SrcContainer $vmDataContainerName -SrcBlob $vmDataBlobName -DestContainer backups -Force

        Get-AzureStorageBlobCopyState -Container backups -Blob $vmDataBlobName -WaitForComplete
      }    
  }    
}

コマンドレット

Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer

エラーをスローします:

Error: Start-AzureStorageBlobCopy : Container name 'a1smallvm-a1smallvm-2015-08-11.vhd' is invalid. Valid names start and end with a lower case letter or a number and has in between a lower case letter, number or dash with no consecutive dashes and is 3 through 63 characters long.

私が取得しているコンテナ名「a1smallvm-a1smallvm-2015-08-11.vhd」は正しい命名形式に従っていますが、それでも名前が無効であるというエラーが表示されるのはなぜですか。VM はポータルから作成されたもので、A1 タイプの VM であり、OS は CentOS "OpenLogic 6.5" です。何が問題なのか手がかりはありますか?

以下は、Write-output からの出力です。

OSDisk: Microsoft.WindowsAzure.Commands.ServiceManagement.Model.OSVirtualHardDisk
Data Disk: 
StorageAccountName: portalvhds14510n2y65vnh
vmOSBlobName: a1smallvm-a1smallvm-2015-08-11.vhd
vmOSContainerName: a1smallvm-a1smallvm-2015-08-11.vhd

正しいスクリプト: ストレージ アカウント名は同じである必要があります。そうでない場合は、宛先ストレージ アカウントのコンテキストを追加する必要があります。

$storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0] Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount '$storagenameAccountName'

また、セグメントのインデックスは-1ではなく-2にする必要があります $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-2].Split(‘/’)[0]

4

1 に答える 1

0

私は PowerShell の専門家ではありません (そして、それを行うためのより良い方法があると確信しています) が、次のことを行うことができます。

$vmOSContainerName = $vmOSDisk.MediaLink.AbsolutePath.Split('/')[1]

vhdsこれにより、ブロブ コンテナーの名前が出力されます。

于 2015-08-11T11:31:28.560 に答える