Enabling CBT and resetting CBT manually involves configuration changes while the VM is powered down.
An alternative method of enabling and resetting CBT while the VM is powered on is to use vSphere PowerCLI.
vSphere PowerCLI can be used to automate the different virtual machine tasks. vSphere PowerCLI provides easy-to-use C# and PowerShell interface to VMware vSphere APIs. For more details on PowerCLI - http://kb.vmware.com/kb/2032946
Warning: All scripts provided in this article are meant to be used as examples and are not supported by AppAssure.
Ensure that vSphere PowerCLI is installed on the machine where you will be running the script below.
Save the PowerShell script below to a .ps1 file. Ensure that the execution policy for your environment will allow scripts to run. You may set the execution policy level by running the set-executionpolicy cmdlet with the appropriate option selected (i.e. set-executionpolicy remotesigned).
To Enable CBT
if ( (Get-PSsnapin -registered | Where-Object {$_.name -contains "VMware.VimAutomation.Core"} ) -ne $NULL )
{
if ( (Get-PSsnapin | Where-Object {$_.name -contains "VMware.VimAutomation.Core"} ) -eq $NULL )
{ Add-PSSnapin VMware.VimAutomation.Core }
Write-Host "VMware vSphere PowerCLI installed" -foregroundcolor green
}
else
{
Write-Host "VMware vSphere PowerCLI is not installed." -foregroundcolor yellow
exit
}
$VCserver = Read-Host "Enter hostname or IP address of the VC/ESXI server"
$answer = Read-Host "Do you want to use current user credentials, y/n ? If connecting to an ESXi server,please select n"
if ($answer -eq 'y')
{
Write-Host "Establishing connection. Please wait..."
$vcConnection = Connect-VIServer $VCserver
}
else
{
$vcConnection = Connect-VIServer $VCserver -User ""
}
if (!$vcConnection)
{
Write-Host "Could not connect"
exit
}
$vm = Read-Host "Enter the VM name"
$vmView = Get-VM $vm | Get-View
Write-Host "To enable CBT, a snapshot will be taken and removed."
$userInput = Read-Host "Do you want to proceed? Y/n"
if ($userInput -eq 'Y')
{
if ($vmView.ExtensionData.Runtime.ConnectionState -eq 'disconnected')
{
Write-Host "VM Disconnected Unable to Update"
}
else
{
Get-VM $vm | Get-View | foreach {
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.changeTrackingEnabled = $true
$taskMoRef = $_.ReconfigVM_Task($spec)
}
Write-Host "CBT enabled. Taking snap... " -NoNewLine
$snap = Get-VM $vm | New-Snapshot -Name 'Enable CBT'
Write-Host "Removing snap..."
$snap | Remove-Snapshot -confirm:$false
}
}
To re-enable CBT
if ( (Get-PSsnapin -registered | Where-Object {$_.name -contains "VMware.VimAutomation.Core"} ) -ne $NULL )
{
if ( (Get-PSsnapin | Where-Object {$_.name -contains "VMware.VimAutomation.Core"} ) -eq $NULL )
{ Add-PSSnapin VMware.VimAutomation.Core }
Write-Host "VMware vSphere PowerCLI installed" -foregroundcolor green
}
else
{
Write-Host "VMware vSphere PowerCLI is not installed." -foregroundcolor yellow
exit
}
$VCserver = Read-Host "Enter hostname or IP address of the VC/ESXI server"
$answer = Read-Host "Do you want to use current user credentials, y/n ? If connecting to an ESXi server,please select n"
if ($answer -eq 'y')
{
Write-Host "Establishing connection. Please wait..."
$vcConnection = Connect-VIServer $VCserver
}
else
{
$vcConnection = Connect-VIServer $VCserver -User ""
}
if (!$vcConnection)
{
Write-Host "Could not connect"
exit
}
$vm = Read-Host "Enter the VM name"
$vmView = Get-VM $vm | Get-View
Write-Host "To re-enable CBT, a snapshot will be taken and removed."
$userInput = Read-Host "Do you want to proceed? Y/n"
if ($userInput -eq 'Y')
{
if ($vmView.ExtensionData.Runtime.ConnectionState -eq 'disconnected')
{
Write-Host "VM Disconnected Unable to Update"
}
else
{
Get-VM $vm | Get-View | foreach {
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.changeTrackingEnabled = $false
$taskMoRef = $_.ReconfigVM_Task($spec)
}
Write-Host "CBT disabled. Taking snap... " -NoNewLine
$snap = Get-VM $vm | New-Snapshot -Name 'Disable CBT'
Write-Host "Removing snap..."
$snap | Remove-Snapshot -confirm:$false
Get-VM $vm | Get-View | foreach {
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.changeTrackingEnabled = $true
$taskMoRef = $_.ReconfigVM_Task($spec)
}
Write-Host "CBT enabled. Taking snap... " -NoNewLine
$snap = Get-VM $vm | New-Snapshot -Name 'Enable CBT'
Write-Host "Removing snap..."
$snap | Remove-Snapshot -confirm:$false
}
}