VMware Cloud Community
MehdiF
Enthusiast
Enthusiast
Jump to solution

Create CD/ DVDdrive without shutdow vm

Hello,

I would like create a device CD/DRIVE DVD without shutdow vm but there is a error message display : "The VM must be in the following state : Poweredoff"

Issue_createCD.png

i must use this solution because i have a constraint to upgrade vmwaretools.

The goal is to do a script wich deploy vmtools on the VMs starting to create this device.

Thank you very much for your help.

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Try like this

$vmName = 'MyVM'

$vm = Get-VM -Name $vmName


$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$dev1 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev1.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$cd = New-Object VMware.Vim.VirtualCdrom

$cd.Key = -1

$cd.ControllerKey = -2

$cd.Backing = New-Object VMware.Vim.VirtualCdromRemotePassthroughBackingInfo

$cd.Backing.DeviceName = ''

$dev1.Device = $cd

$spec.DeviceChange += $dev1


$dev2 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev2.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$ctrl = New-Object VMware.Vim.VirtualAHCIController

$ctrl.Key = -2

$dev2.Device = $ctrl

$spec.DeviceChange += $dev2


$vm.ExtensionData.ReconfigVM($spec)


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

Reply
0 Kudos
7 Replies
LucD
Leadership
Leadership
Jump to solution

Try like this

$vmName = 'MyVM'

$vm = Get-VM -Name $vmName


$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$dev1 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev1.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$cd = New-Object VMware.Vim.VirtualCdrom

$cd.Key = -1

$cd.ControllerKey = -2

$cd.Backing = New-Object VMware.Vim.VirtualCdromRemotePassthroughBackingInfo

$cd.Backing.DeviceName = ''

$dev1.Device = $cd

$spec.DeviceChange += $dev1


$dev2 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev2.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$ctrl = New-Object VMware.Vim.VirtualAHCIController

$ctrl.Key = -2

$dev2.Device = $ctrl

$spec.DeviceChange += $dev2


$vm.ExtensionData.ReconfigVM($spec)


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
MehdiF
Enthusiast
Enthusiast
Jump to solution

Hello Luc,

Thank you very much for your feedback.

I added following lines at end code to mount iso file :

Get-VM -Name $vm | Get-CDDrive |

Set-CDDrive -ISOPath "[datastore] \.iso" -Connected $true -Confirm:$false

Thank you again.

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

The CD parameter expects a CDDrive object, not a VM.
Try like this

Get-CDDrive -VM $vm |

Set-CDDrive -ISOPath $Fullpath -Connected $true -Confirm:$false


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
MehdiF
Enthusiast
Enthusiast
Jump to solution

Hello LucD,

I come back to you because i have an other question regarding this script. In this case, the script create a new cddrive.

On some virtual machine i have already a CD-Drive create so i would like add a condition :

if CD-DRive Create

     add iso and connect CD-Drive

it's possible?

I will search. if i find something i will answer on post.

Thank you.


Best Regards,

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

Try something like this

Get-VM |

ForEach-Object -Process {

   try

   {

   $cd = Get-CDDrive -VM $_ -ErrorAction Stop

   }

   catch

   {

   $cd = New-CDDrive -VM $_ -Confirm:$false -StartConnected:$true

   }

   Set-CDDrive -CD $cd -IsoPath $iso -Confirm:$false

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
MehdiF
Enthusiast
Enthusiast
Jump to solution

Thank you for your feedback.

I added lines at the end script but without success :

foreach($vmlist in (Get-Content -Path C:\VMware\listvm.txt)){

$vm = Get-VM -Name $vmlist

$datastore = "[datastore]"

$isopath = "Vmware tools/linux.iso"

$Fullpath = "$datastore $isopath"

$spec = New-Object VMware.Vim.VirtualMachineConfigSpec

$dev1 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev1.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$cd = New-Object VMware.Vim.VirtualCdrom

$cd.Key = -1

$cd.ControllerKey = -2

$cd.Backing = New-Object VMware.Vim.VirtualCdromRemotePassthroughBackingInfo

$cd.Backing.DeviceName = 'pcc-007349\Vmware tools\linux.iso'

$dev1.Device = $cd

$spec.DeviceChange += $dev1

$dev2 = New-Object VMware.Vim.VirtualDeviceConfigSpec

$dev2.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::add

$ctrl = New-Object VMware.Vim.VirtualAHCIController

$ctrl.Key = -2

$dev2.Device = $ctrl

$spec.DeviceChange += $dev2

$vm.ExtensionData.ReconfigVM($spec)

Get-VM -Name $vm |

ForEach-Object -Process {

   try

   {

   $cd = Get-CDDrive -VM $_ -ErrorAction Stop

   }

   catch

   {

   $cd = New-CDDrive -VM $_ -Confirm:$false -StartConnected:$true

   }

   Set-CDDrive -CD $cd -IsoPath "[datastore] Vmware tools\linux.iso" -Confirm:$false

}

}

isomount.png

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

Looks like there is a Question pending.
Try using the Get-VMquestion and Set-VMquestion. See the provided examples to see how it works.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos