Set-CDDrive
VMware: Modifies the configuration of a virtual CD drive
#Requires -Version 5.1
#Requires -Modules VMware.VimAutomation.Core
[CmdletBinding(DefaultParameterSetName = "VM")]
Param(
[Parameter(Mandatory = $true, ParameterSetName = "VM")]
[Parameter(Mandatory = $true, ParameterSetName = "Template")]
[Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
[string]$VIServer,
[Parameter(Mandatory = $true, ParameterSetName = "VM")]
[Parameter(Mandatory = $true, ParameterSetName = "Template")]
[Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
[pscredential]$VICredential,
[Parameter(Mandatory = $true, ParameterSetName = "VM")]
[Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
[string]$VMName,
[Parameter(Mandatory = $true, ParameterSetName = "Template")]
[string]$TemplateName,
[Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
[string]$SnapshotName,
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[string]$DriveName = '*',
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[bool]$Connected,
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[switch]$NoMedia,
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[string]$HostDevice,
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[string]$IsoPath,
[Parameter(ParameterSetName = "VM")]
[Parameter(ParameterSetName = "Template")]
[Parameter(ParameterSetName = "Snapshot")]
[bool]$StartConnected
)
Process {
try {
$vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
$cmdArgs = @{ ErrorAction = 'Stop'; Server = $vmServer }
if ($PSCmdlet.ParameterSetName -eq "Snapshot") { $vm = Get-VM @cmdArgs -Name $VMName; $snap = Get-Snapshot @cmdArgs -Name $SnapshotName -VM $vm; $cmdArgs.Add('Snapshot', $snap) }
elseif ($PSCmdlet.ParameterSetName -eq "Template") { $temp = Get-Template @cmdArgs -Name $TemplateName; $cmdArgs.Add('Template', $temp) }
else { $vm = Get-VM @cmdArgs -Name $VMName; $cmdArgs.Add('VM', $vm) }
$drive = Get-CDDrive @cmdArgs -Name $DriveName -ErrorAction Stop
if ($null -eq $drive) { throw "No CD drive found" }
$setArgs = @{ ErrorAction = 'Stop'; CD = $drive; Server = $vmServer; Confirm = $false }
if ($PSBoundParameters.ContainsKey('IsoPath')) { $null = Set-CDDrive @setArgs -IsoPath $IsoPath }
if ($PSBoundParameters.ContainsKey('HostDevice')) { $null = Set-CDDrive @setArgs -HostDevice $HostDevice }
if ($PSBoundParameters.ContainsKey('Connected')) { $null = Set-CDDrive @setArgs -Connected $Connected }
if ($PSBoundParameters.ContainsKey('NoMedia')) { $null = Set-CDDrive @setArgs -NoMedia:$NoMedia }
if ($PSBoundParameters.ContainsKey('StartConnected')) { $null = Set-CDDrive @setArgs -StartConnected $StartConnected }
$result = Get-CDDrive @cmdArgs -Name $drive.Name -ErrorAction Stop | Select-Object *
if ($null -ne $result) { $result | Add-Member -NotePropertyName Timestamp -NotePropertyValue (Get-Date -Format "yyyy-MM-dd HH:mm:ss") -PassThru -Force }
}
catch { throw }
finally { if ($null -ne $vmServer) { Disconnect-VIServer -Server $vmServer -Force -Confirm:$false -ErrorAction SilentlyContinue } }
}IP address or DNS name of the vSphere server
PSCredential object for authenticating with the server
Virtual machine whose CD drive to modify
Virtual machine template whose CD drive to modify
Snapshot whose CD drive to modify
Name of the CD drive to modify
Connect or disconnect the CD drive
Off
Detach any connected media from the CD drive
Host CD drive backing the virtual CD drive
Datastore path to the ISO file backing the virtual CD drive
CD drive starts connected when the VM powers on