我暗自怀疑这可能是一个错误,但我绝对愿意接受我做错事的可能性。
我在 $vm 中有一个 VMware 虚拟机,我正在尝试为其分配一个启动 CD。$vm 已关闭。
记录的方法看起来非常简单:
Set-CDDrive -CD (Get-CDDrive -vm $vm) -IsoPath "[datastorename] \whatever.iso" -StartConnected 1
现在,当我启动虚拟机时,它会立即尝试 PXEboot。我关闭机器,然后在 vSphere 客户端中编辑虚拟机的属性,转到“CD/DVD 驱动器 1”,并验证“设备状态”旁边的“开机时连接”旁边是否有复选标记。
疯狂的事情来了。当我取消选中该框,然后再次选中它,然后启动虚拟机时,它会从 ISO 启动。
我一次又一次地这样做,打开控制台,关闭控制台,每次我都可以在 CLI 上设置 StartConnected 标志,并且 GUI 会反映该设置,但只有在我手动标记复选框后,它才会真正从 ISO 启动。
我是否忽略了在 PowerCLI 中执行某个步骤来使此设置“生效”?
答案1
从在线 PowerCLI 参考中,我看到以下示例(将后面的值替换-ISOPath
为您的数据存储和 .iso 文件的名称/路径,如下所示"[yourdatastore] IsoFolder\$iso"
):
$cd = New-CDDrive -VM $vm -ISOPath "[sof-20666-esx:storage1] ISO\testISO.iso"
Set-CDDrive -CD $cd -StartConnected -Connected
答案2
中的第一个反斜杠ISOPath
很可能就是问题所在。我在我们的配置脚本中做了完全相同的事情,它看起来像这样:
Get-CDDrive $VM | Set-CDDrive -IsoPath "[DATASTORE] ISO\BOOT.ISO" -StartConnected:$true -Confirm:$false
此外,如果您为接受布尔值的参数提供布尔值(如StartConnected
),请尝试养成使用分号的习惯,如上例所示。如果您碰巧有一个接受多个未命名参数的函数 Cmdlet,则您的1
可能会被错误地解释为函数调用中的新参数,而不是您想要的参数的值。
因此,不要使用-StartConnected 1
,而是使用-StartConnected:1
或-StartConnected:$true
。
答案3
配置 VMware VM 的启动顺序的说明请参阅此知识库文章。
PowerCLI 变体摘要:
- 创建规格
$vm = Get-VM myvm
$spec = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec
$spec.BootOptions = $vm.ExtensionData.Config.BootOptions
$disk1 = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableDiskDevice
$disk1.DeviceKey = (Get-HardDisk -Name 'Hard disk 1' -VM $vm).ExtensionData.Key
$cdrom = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableCdromDevice
$spec.BootOptions.BootOrder = $cdrom,$disk1
- 关闭虚拟机
(该配置只能在断电状态下进行设置)
$vm |Stop-VMGuest
- 应用规范
$vm.ExtensionData.ReconfigVM($spec)
- 再次启动虚拟机
$vm |Start-VM
VM 将从已挂载的 iso 启动。
笔记:
- 该配置将永久保留。如果您想要恢复此配置,则需要手动执行此操作(
$spec.BootOptions.BootOrder = $disk1,$cdrom
) - 您需要将 iso 设置为在启动时连接