通过 PowerCLI 设置 VM 启动 CD

通过 PowerCLI 设置 VM 启动 CD

我暗自怀疑这可能是一个错误,但我绝对愿意接受我做错事的可能性。

我在 $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 变体摘要:

  1. 创建规格
   $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
  1. 关闭虚拟机
    (该配置只能在断电状态下进行设置)
   $vm |Stop-VMGuest
  1. 应用规范
   $vm.ExtensionData.ReconfigVM($spec)
  1. 再次启动虚拟机
   $vm |Start-VM

VM 将从已挂载的 iso 启动。

笔记:

  • 该配置将永久保留。如果您想要恢复此配置,则需要手动执行此操作($spec.BootOptions.BootOrder = $disk1,$cdrom
  • 您需要将 iso 设置为在启动时连接

相关内容