我是Azure的新手。我正在尝试使用Powershell在Azure中创建资源。
我的要求是从VM创建映像。我遵循了做到这一点的方法:
过程1:手动完成
通用化VM:登录到VM->打开命令提示符-> cd%windir%\ system32 \ sysprep->运行sysprep.exe->检查通用按钮->关闭。
创建快照:转到Azure门户->转到通用的VM->单击“捕获”按钮->提供映像名称并提及资源组,然后单击“创建”。
这将创建一个图像。
过程2:使用powershell进行操作
# create session of the VM
$UserName = "$IPAddress\$adminUsername"
$Password = ConvertTo-SecureString $adminPassword -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($UserName, $Password)
$s = New-PSSession -ComputerName $IPAddress -Credential $psCred
# Run SysPrep for generalizing the VM
$sysprep = 'C:\Windows\System32\Sysprep\Sysprep.exe'
$arg = '/generalize /oobe /shutdown /quiet'
Invoke-Command -Session $s -ScriptBlock {param($sysprep,$arg)Start-Process -FilePath $sysprep -ArgumentList $arg} -ArgumentList $sysprep,$arg
#Stop the VM
Stop-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $virtualMachineName -Force
# Generalize the VM
Set-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $virtualMachineName -Generalized
# Create the Image
$vm = Get-AzureRmVM -Name $virtualMachineName -ResourceGroupName $ResourceGroupName
$image = New-AzureRmImageConfig -Location $location -SourceVirtualMachineId $vm.ID
New-AzureRmImage -Image $image -ImageName $ImageName -ResourceGroupName $ResourceGroupName
两个过程都将创建一个图像。但是我面临的问题是,当我从进程1创建的映像中旋转VM时,成功创建了VM,没有任何问题。
但是,当我从由Process2创建的映像中旋转虚拟机时,正在创建它,但出现以下错误消息:
设置失败。 VM“ VM名称”的操作系统配置未完成 在指定的时间内。但是,检测到VM guest虚拟机代理 运行。这表明来宾操作系统尚未做好充分准备 用作VM映像(带有CreateOption = FromImage)。
任何人都可以告诉我我在Powershell脚本中做错什么了吗,我得到了这个错误。
答案 0 :(得分:0)
有很多关于在Azure中使用图像来创建虚拟机和创建虚拟机的文档。如错误所示,您可能错过了一步。
如果要从本地上传VHD以在Azure中使用,请从这些文档开始
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/prepare-for-upload-vhd-image
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/upload-generalized-managed
如果要捕获其映像的VM已经在Azure中并且可以正常工作,则从这些开始
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/capture-image-resource
最后一个链接显示了如何通过门户或简单的PS命令从该映像创建VM
New-AzVm `
-ResourceGroupName "myResourceGroup" `
-Name "myVMfromImage" `
-ImageName "myImage" `
-Location "East US" `
-VirtualNetworkName "myImageVnet" `
-SubnetName "myImageSubnet" `
-SecurityGroupName "myImageNSG" `
-PublicIpAddressName "myImagePIP" `
-OpenPorts 3389
答案 1 :(得分:0)
时间似乎是问题所在。
Sysprep通常需要10到15分钟,您没有睡眠时间。发送sysprep脚本后,您将关闭VM,而没有时间真正运行sysprep系统。
您可以放置睡眠时间或循环查看VM是否处于Stopped
状态。