похоже, когда они писали new-vm командлет, они просто поленились дополнительные опции для клонирования туда запихнуть... или спроса на них не было большого. однако в АПИ они есть.
код ниже работает для вм, у которой два диска: один системный, один левый. диск, который нужно убрать указывается буквально.
ТЗ: сделать клон вм так, чтобы перед клонированием был убран несистемный диск. все остальные параметры оригинальной вм должны быть скопированы как есть.
$connection = Connect-VIServer -Server 192.168.0.1 -user "domain\user" -Password "P@ssw0rd" # подключаемся к вицентру
$vm = get-vm "original-vm" # засовываем оригинальную ВМ в переменную
$folder = get-folder "folder_name_here" # выставляем в какую папку будет положена копия
$spec = New-Object VMware.Vim.VirtualMachineCloneSpec # создаем объект со спецификацией клона
$spec.Config = New-Object VMware.Vim.VirtualMachineConfigSpec # создаем секцию конфигурации в предыдущем объекте
$excludedisk = New-Object VMware.Vim.VirtualDeviceConfigSpec # создаем объект, указывающий на конфигурацию устройства?
$excludedisk.Operation = "remove" # указываем, что мы хотим сделать с оригинальной конфигурацией
$excludedisk.Device = $vm.ExtensionData.Config.Hardware.device | where diskobjectid -EQ "id diska, kotoryj hotim ubrat"
$spec.Config.DeviceChange += $excludedisk # запихиваем команду на удаление диска в спецификацию для клонирования.
$spec.Location = New-Object VMware.Vim.VirtualMachineRelocateSpec # наверно, создаем объект для указания где хранить клон...
$spec.PowerOn = $false # наверно, указываем, что после клонирования клон запускать не надо
$spec.Template = $false # наверно, указываем, что никакие шаблоны при клонировании не используются
$vm.ExtensionData.CloneVM($folder.ExtensionData.MoRef,"imia_novoj_vm",$spec) # запускаем собственно клонирование с указанной конфигурацией клона
я
настоятельно рекомендую проверить это все на тестовой вм перед тем как лезть с этим кодом в production.
идея честно сперта отсюда:
https://communities.vmware.com/thread/409695?start...