<# .NOTES =========================================================================== Created by: Brian Graf Date: January 8, 2018 Organization: VMware Blog: brianjgraf.com Twitter: @vBrianGraf =========================================================================== .DESCRIPTION This will allow you to vMotion workloads from your on-premises environment to VMware Cloud on AWS. .NOTES PLEASE NOTE THAT THIS REQUIRES L2 Stretch Network between your on-prem environment and VMC. Without the Layer2 VPN, vMotion will not work. .Example # ------------- VARIABLES SECTION - EDIT THE VARIABLES BELOW ------------- $destinationvCenter = "vcenter.sddc-52-53-75-20.vmc.vmware.com" $destinationvCenterUser = "clouduser@cloud.local" $destinationvCenterPassword = 'VMware1!' $DestinationResourcePool = "Compute-ResourcePool" $DestinationPortGroup = "L2-Stretch-Network" $DestinationDatastore = "WorkloadDatastore" $DestinationFolder = "Workloads" $SourcevCenter = "vcsa-tmm-02.utah.lab" # This is your on-prem vCenter $SourcevCenterUser = "administrator@vsphere.local" $SourcevCenterPassword = "VMware1!" # This is an easy way to select which VMs will vMotion up to VMC. The Asterisk # acts as a wildcard $VMs = "BG_Ubuntu_*" #> # ------------- VARIABLES SECTION - EDIT THE VARIABLES BELOW ------------- $destinationvCenter = "" # This is your VMware Cloud on AWS SDDC $destinationvCenterUser = "" $destinationvCenterPassword = '' $DestinationResourcePool = "" # Name of the resource pool where the VM will be migrated to $DestinationPortGroup = "" # Portgroup name that the VM will be connected to $DestinationDatastore = "" # Name of the vSAN datastore $DestinationFolder = "" # VM folder where the VM will reside $SourcevCenter = "" # This is your on-prem vCenter $SourcevCenterUser = "" $SourcevCenterPassword = "" # This is an easy way to select which VMs will vMotion up to VMC. $VMs = "" # ------------- END VARIABLES - DO NOT EDIT BELOW THIS LINE ------------- # Connect to VMC Server $destVCConn = Connect-VIServer -Server $destinationvCenter -User $destinationvCenterUser -Password $destinationvCenterPassword # Connect to On-Prem Server $sourceVCConn = connect-viserver $SourcevCenter -User $SourcevCenterUser -Password $SourcevCenterPassword # Start numbering for status updates $i = 1 # Count total VMs selected to move $CountVMstoMove = (Get-VM $VMs -Server $sourceVCConn).Count # For each VM Get the necessary information for the migration foreach ($VM in (get-VM $VMs -Server $sourceVCConn)) { # Get the network adapter information $networkAdapter = Get-NetworkAdapter -VM $vm -Server $sourceVCConn # Get the destination resource pool $destination = Get-Resourcepool $DestinationResourcePool -Server $destVCConn # Get the destination portgroup $destinationPortGroup = Get-VDPortgroup -Name $DestinationPortGroup -Server $destVCConn # Get the destination datastore $destinationDatastore = Get-Datastore $DestinationDatastore -Server $destVCConn # Get the destination folder $folder = get-folder $DestinationFolder -server $destVCConn # Write updates as each VM is being migrated Write-host "($i of $CountVMsToMove) Moving " -NoNewline Write-host "$($VM.name) " -NoNewline -ForegroundColor Yellow Write-host "from " -NoNewline Write-host "($SourcevCenter) " -NoNewline -ForegroundColor Yellow Write-host "to " -NoNewline Write-host "($DestinationvCenter) " -ForegroundColor Yellow # The actual vMotion command along with a measurement to time the duration of the vMotion $Duration = Measure-Command {Move-VM -VM $vm -Destination $destination -NetworkAdapter $networkAdapter -PortGroup $destinationPortGroup -Datastore $destinationDatastore -InventoryLocation $folder | Out-Null} # Write the completion string Write-host " ($i of $CountVMsToMove) Move of $($VM.name) Completed in ($Duration) Minutes!" -ForegroundColor Green # Increase our integer by one and move on $i++ }