Get-VIServer -Server [Reflection.Assembly]::LoadWithPartialName("vmware.vim") function remove-HD { param($VMname, $HDname, $Delflag) $vm = Get-View (Get-VM $VMname).ID foreach($dev in $vm.Config.Hardware.Device){ if ($dev.DeviceInfo.Label -eq $HDname){ $key = $dev.Key $name = $dev.Backing.FileName } } $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.deviceChange = @() $spec.deviceChange += New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDevice $spec.deviceChange[0].device.key = $key $spec.deviceChange[0].operation = "remove" $vm.ReconfigVM_Task($spec) if ($Delflag){ $svcRef = new-object VMware.Vim.ManagedObjectReference $svcRef.Type = "ServiceInstance" $svcRef.Value = "ServiceInstance" $serviceInstance = get-view $svcRef $fileMgr = Get-View $serviceInstance.Content.fileManager $datacenter = (Get-View (Get-VM $VMname | Get-Datacenter).ID).get_MoRef() $fileMgr.DeleteDatastoreFile_Task($name, $datacenter) } } function add-HD { param($VMname, $DSname, $Filename, $SCSIcntrl) $vm = Get-View (Get-VM $VMname).ID $ds = Get-View (Get-Datastore -Name $DSname).ID foreach($dev in $vm.config.hardware.device){ if ($dev.deviceInfo.label -eq $SCSIcntrl){ $CntrlKey = $dev.key } } $Unitnumber = 0 $DevKey = 0 foreach($dev in $vm.config.hardware.device){ if ($dev.controllerKey -eq $CntrlKey){ if ($dev.Unitnumber -gt $Unitnumber){$Unitnumber = $dev.Unitnumber} if ($dev.key -gt $DevKey) {$DevKey = $dev.key} } } $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.deviceChange = @() $spec.deviceChange += New-Object VMware.Vim.VirtualDeviceConfigSpec $spec.deviceChange[0].device = New-Object VMware.Vim.VirtualDisk $spec.deviceChange[0].device.backing = New-Object VMware.Vim.VirtualDiskFlatVer2BackingInfo $spec.deviceChange[0].device.backing.datastore = $ds.MoRef $spec.deviceChange[0].device.backing.fileName = "[" + $DSname + "] " + $Filename $spec.deviceChange[0].device.backing.diskMode = "independent_persistent" $spec.deviceChange[0].device.key = $DevKey + 1 $spec.deviceChange[0].device.unitnumber = $Unitnumber + 1 $spec.deviceChange[0].device.controllerKey = $CntrlKey $spec.deviceChange[0].operation = "add" $vm.ReconfigVM_Task($spec) } remove-HD "VM-name" "Hard Disk 3" $TRUE add-HD "PC4" "vmfs2" "PC4/PC4.vmdk" "SCSI Controller 0"