在开发测试实验室中的 Azure 上 运行 sysprep 之后下载 VHD
Download the VHD after running sysprep on Azure in DevTest labs
我在 DevTest 实验室中使用 az lab vm apply-artifacts
命令在我的 VM 上 运行 sysprep 工件。
之后,当我 运行 az lab vm show
时,我得到了一个 computeId,其中包含资源 ID
计算 ID 看起来像:"computeId": "/subscriptions/#####/resourceGroups/###/providers/Microsoft.Compute/virtualMachines/####"
.
如何从中获取磁盘路径。我对 SAS 密钥更感兴趣,我可以在 AzCopy 中使用它来下载与此 VM 关联的 vhd 文件。
目前,Azure 不支持使用 Azcopy 从开发测试实验室下载 VHD。
作为解决方法,我们可以从此 VM 创建自定义映像(创建快照),然后使用 PowerShell 通过 Azure PowerShell 将此快照复制到另一个存储帐户。
然后我们可以使用这个 PowerShell 来复制这个快照,这里是脚本:
#Provide the subscription Id of the subscription where snapshot is created
$subscriptionId = "yourSubscriptionId"
#Provide the name of your resource group where snapshot is created
$resourceGroupName ="yourResourceGroupName"
#Provide the snapshot name
$snapshotName = "yourSnapshotName"
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
$sasExpiryDuration = "3600"
#Provide storage account name where you want to copy the snapshot.
$storageAccountName = "yourstorageaccountName"
#Name of the storage container where the downloaded snapshot will be stored
$storageContainerName = "yourstoragecontainername"
#Provide the key of the storage account where you want to copy snapshot.
$storageAccountKey = 'yourStorageAccountKey'
#Provide the name of the VHD file to which snapshot will be copied.
$destinationVHDFileName = "yourvhdfilename"
# Set the context to the subscription Id where Snapshot is created
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
#Get the snapshot using name and resource group
$snapshot = Get-AzureRmSnapshot -ResourceGroupName $ResourceGroupName -SnapshotName $SnapshotName
#Generate the SAS for the snapshot
$sas = Grant-AzureRmSnapshotAccess -ResourceGroupName $ResourceGroupName -SnapshotName $SnapshotName -DurationInSecond $sasExpiryDuration -Access Read
#Create the context for the storage account which will be used to copy snapshot to the storage account
$destinationContext = New-AzureStorageContext –StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
#Copy the snapshot to the storage account
Start-AzureStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
有关此脚本的更多信息,请参阅此link。
更新:
我们可以通过 Azure 门户创建镜像,像这样:
我在 DevTest 实验室中使用 az lab vm apply-artifacts
命令在我的 VM 上 运行 sysprep 工件。
之后,当我 运行 az lab vm show
时,我得到了一个 computeId,其中包含资源 ID
计算 ID 看起来像:"computeId": "/subscriptions/#####/resourceGroups/###/providers/Microsoft.Compute/virtualMachines/####"
.
如何从中获取磁盘路径。我对 SAS 密钥更感兴趣,我可以在 AzCopy 中使用它来下载与此 VM 关联的 vhd 文件。
目前,Azure 不支持使用 Azcopy 从开发测试实验室下载 VHD。
作为解决方法,我们可以从此 VM 创建自定义映像(创建快照),然后使用 PowerShell 通过 Azure PowerShell 将此快照复制到另一个存储帐户。
然后我们可以使用这个 PowerShell 来复制这个快照,这里是脚本:
#Provide the subscription Id of the subscription where snapshot is created
$subscriptionId = "yourSubscriptionId"
#Provide the name of your resource group where snapshot is created
$resourceGroupName ="yourResourceGroupName"
#Provide the snapshot name
$snapshotName = "yourSnapshotName"
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/azure/storage/storage-dotnet-shared-access-signature-part-1
$sasExpiryDuration = "3600"
#Provide storage account name where you want to copy the snapshot.
$storageAccountName = "yourstorageaccountName"
#Name of the storage container where the downloaded snapshot will be stored
$storageContainerName = "yourstoragecontainername"
#Provide the key of the storage account where you want to copy snapshot.
$storageAccountKey = 'yourStorageAccountKey'
#Provide the name of the VHD file to which snapshot will be copied.
$destinationVHDFileName = "yourvhdfilename"
# Set the context to the subscription Id where Snapshot is created
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
#Get the snapshot using name and resource group
$snapshot = Get-AzureRmSnapshot -ResourceGroupName $ResourceGroupName -SnapshotName $SnapshotName
#Generate the SAS for the snapshot
$sas = Grant-AzureRmSnapshotAccess -ResourceGroupName $ResourceGroupName -SnapshotName $SnapshotName -DurationInSecond $sasExpiryDuration -Access Read
#Create the context for the storage account which will be used to copy snapshot to the storage account
$destinationContext = New-AzureStorageContext –StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
#Copy the snapshot to the storage account
Start-AzureStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
有关此脚本的更多信息,请参阅此link。
更新:
我们可以通过 Azure 门户创建镜像,像这样: