Next Migration al VM’s from vSphere 7 to vSphere 8
Tag: Migration
Ultimate Cross vCenter Script
Last year i attend the Dutch VMUG (NLVMUG) i followed session from
Michael Wilmsen that was: Migrate your datacenter without downtime.
I must also move al lot of VM’s from different datacenters to other datacenters.
I use the script from Michael Wilmsen to move the VM’s. But along the way I counter some problems with this script. So I begon tweaking and tweaking and tweaking this script to create for me the ultimate Cross vCenter PowerCLI Script.
Coolfeatures:
– Info through Whattsapp (Default not enabled)
– Dryrun (Test Run)
– Logging
– Selection through GUI
– Multiple Nic support maximum of 4.
– Datastore en Host selection based on Free space en Free Memory
– Check of Destination Host or Datastore in Maintance
– Destination Store exist in Destination Cluster
MoveVM.ps1:
#Filename: MoveVM.ps1
#Author: M. Wilmsen / W. Vissers
#Source: http://virtual-hike.com/nlvmug-2018/
#Version: 2.0
#Date: 21-10-2018
#ChangeLog:
# V0.9 – M. Wilmsen First Version
# V1.0 – Fixed Multiple Nics to maximium of 4 nics
# – Logfile name VM name
# V1.1 – Destination Cluster not the first Host
# V1.2 – Selected Destination host based on memory used
# V1.3 – Fixed folder location and VirtualPortGroup
# V1.4 – Fixed Datastore in Maintance
# V1.5 – Using Get-VICredentialStoreItem + Logpath Fixt
# V1.6 – Fixed Log in Hours in 24 uurs
# V1.7 – Fixed Using DatastoreCluster name based on Cluster name!
# V1.8 – Check if Destination has the same datastore
# – Ask know for input
# – VM selection with VMhost
# – Fixed Ping Check
# v1.9 – Added Destination Store exist in Destination Cluster
# v2.0 – Fixed Destination Store exist in Destination Cluster
<#
.SYNOPSIS
Script to migrate a virtual machine
.DESCRIPTION
Script to migrate compute and storage from cluster to cluster. Log will be in current dir [VM]-[-timestamp].log
.EXAMPLE
MoveVM.ps1
#>
################################## INIT #################################################
#Set WebOperation timeout
# set-PowerCLIConfiguration -WebOperationTimeoutSeconds 3600
#Define Global variables
$location = “D:\xmovewhattsapp”
$LogPath = “.\”
$DataStoreClusterPrefix = “SAN-“
$SourceVC = Read-Host “Give Source vCenter”
$DestinationVC = Read-Host “Give Destination vCenter”
$DRSRecommendation = $true
$Dryrun = $false
$SendWhatsApp = $false
$WhatsAppNumbers = “0123456789”
$WhatsAppGroup = “Namehireyourwhattsgroup”
$instanceId = “23” #chang this line
$clientId = “demo@demo.nl” #change this line
$clientSecret = “Puthiersecretid” #change this line
################################## PASSWORD STORE ##############################################
#Username
# Check if credentials exist in credential store if not ask for credentials and put them in credential store
If ((Get-VICredentialStoreItem).host -notcontains $SourceVC) {New-VICredentialStoreItem -Host $SourceVC -User $env:USERNAME -Password ((get-credential).GetNetworkCredential().Password)}
If ((Get-VICredentialStoreItem).host -notcontains $DestinationVC) {New-VICredentialStoreItem -Host $DestinationVC -User $env:USERNAME -Password ((get-credential).GetNetworkCredential().Password)}
# Remove-VICredentialStoreItem * -Confirm:$false
################################## END INIT #################################################
################################## FUNCTIONS #################################################
#Define log function
Function LogWrite
{
Param ([string]$logstring)
#Add logtime to entry
$LogTime = Get-Date -Format “MM-dd-yyyy_HH-mm-ss”
$logstring = $LogTime + ” : ” + $logstring
#Write logstring
Add-content $LogFile -value $logstring
Write-Host $logstring
}
#Define SendWhatsApp function
Function SendWhatsApp
{
Param ([string] $message)
if ( $SendWhatsApp ) {
$LogTime = Get-Date -Format “MM-dd-yyyy_hh-mm-ss”
$message = $logtime + ” : ” + $message
foreach ( $number in $WhatsAppNumbers )
{
$jsonObj = @{‘group_admin’=$number;
‘group_name’=$WhatsAppGroup;
‘message’=$message;}
Try {
$res = Invoke-WebRequest -Uri “http://api.whatsmate.net/v2/whatsapp/group/message/$instanceId” `
-Method Post `
-Headers @{“X-WM-CLIENT-ID”=$clientId; “X-WM-CLIENT-SECRET”=$clientSecret;} `
-Body (ConvertTo-Json $jsonObj)
LogWrite “WhatsMate Status Code: ” $res.StatusCode
LogWrite $res.Content
}
Catch {
$result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$responseBody = $reader.ReadToEnd();
Write-host “Status Code: ” $_.Exception.Response.StatusCode
Write-host $message
}
}
}
}
function Get-VmSize($vm)
{
#Initialize variables
$VmDirs =@()
$VmSize = 0
$searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec
$searchSpec.details = New-Object VMware.Vim.FileQueryFlags
$searchSpec.details.fileSize = $TRUE
Get-View -VIObject $vm | % {
#Create an array with the vm’s directories
$VmDirs += $_.Config.Files.VmPathName.split(“/”)[0]
$VmDirs += $_.Config.Files.SnapshotDirectory.split(“/”)[0]
$VmDirs += $_.Config.Files.SuspendDirectory.split(“/”)[0]
$VmDirs += $_.Config.Files.LogDirectory.split(“/”)[0]
#Add directories of the vm’s virtual disk files
foreach ($disk in $_.Layout.Disk) {
foreach ($diskfile in $disk.diskfile){
$VmDirs += $diskfile.split(“/”)[0]
}
}
#Only take unique array items
$VmDirs = $VmDirs | Sort | Get-Unique
foreach ($dir in $VmDirs){
$ds = Get-Datastore ($dir.split(“[“)[1]).split(“]”)[0]
$dsb = Get-View (($ds | get-view).Browser)
$taskMoRef = $dsb.SearchDatastoreSubFolders_Task($dir,$searchSpec)
$task = Get-View $taskMoRef
while($task.Info.State -eq “running” -or $task.Info.State -eq “queued”){$task = Get-View $taskMoRef }
foreach ($result in $task.Info.Result){
foreach ($file in $result.File){
$VmSize += $file.FileSize
}
}
}
}
return $VmSize
}
################################## END FUNCTIONS #################################################
#Login to vCenter servers
if (($global:DefaultVIServers).Name -notcontains $SourceVC -or $DestinationVC) {
#SourceVC
$ConnectVC = Connect-VIServer $SourceVC
$Message = “Connecting to ” + $ConnectVC + ” as ” + $env:USERNAME
#Logwrite $Message
#DestionationVC
$ConnectVC = Connect-VIServer $DestinationVC
$Message = “Connecting ” + $ConnectVC + ” as ” + $env:USERNAME
#Logwrite $Message
# Disconnect-VIServer * -Confirm:$false
}
Set-Location $location
$cluster=Get-Cluster -Server $SourceVC | Out-GridView -OutputMode Single -Title “Select Source Cluster”
$vmtomigrate =Get-Cluster $cluster -Server $SourceVC | Get-VM | Out-GridView -OutputMode Single -Title “Select VM”
$DestinationCluster = Get-Cluster -Server $DestinationVC | Out-GridView -OutputMode Single -Title “Select Destination Cluster”
$vmfolder=Get-folder -Server $DestinationVC | Out-GridView -OutputMode Single -Title “Select Folder”
#Main Script
#Set $MigError to false befor migration
$MigError = $false
#Get VM variables
$vm = get-vm $vmtomigrate
#Define LogFile with time stamp
$LogTime = Get-Date -Format “MM-dd-yyyy_hh-mm-ss”
if([IO.Directory]::Exists($LogPath))
{
#Do Nothing!!
}
else
{
New-Item -ItemType directory -Path $LogPath
}
$LogFile = $LogPath+$VM+”-“+$LogTime+”.log”
# LogWrite Gebruiker
Logwrite $env:USERNAME
# Get-VM Info
$VMHDDSize = Get-VmSize($vm)
$VMHDDSize = [Math]::Round(($VMHDDSize / 1GB),2)
Logwrite “Start Virtual Machine Move”
#If WhatsApp make notice
if ( $SendWhatsApp ) { LogWrite “Notifications will be send using WhatsApp to WhatsApp Group: $WhatsAppGroup” }
#If DryRun make Notice
if ( $Dryrun ) {
Logwrite “Start move virtual machines $vm Disksize $VMHDDSize GB (DryRun)”
SendWhatsApp “Start move virtual machines $vm Disksize $VMHDDSize GB(DryRun)”
}
else {
Logwrite “Start move virtual machines $vm Disksize $VMHDDSize GB”
SendWhatsApp “Start move virtual machines $vm Disksize $VMHDDSize GB”
}
$SourceCluster = get-vm $vm | Get-Cluster | select name
$vmip = $vm | Select @{N=”IP Address”;E={@($_.guest.IPAddress[0])}}
$vmip = $vmip.”ip address”
$VMHDDSize = Get-VmSize($vm)
$VMHDDSize = [Math]::Round(($VMHDDSize / 1GB),2)
$NetworkAdapter = Get-NetworkAdapter -VM $vm -Server $SourceVC
$SourceVMPortGroup = Get-NetworkAdapter -vm $vm | Select NetworkName
$switchname = $DestinationCluster
$Datastore = Get-VM $vm | Get-DataStore -Server $sourceVC | Select @{N=”Name”;E={@($_.Name)}}
$Datastore = $Datastore.Name
$DatastoreExistinOthervCenter = Get-Cluster $DestinationCluster | Get-DataStore -Server $DestinationVC | ? {$_.Name -like “*$Datastore*”}
if ($DatastoreExistinOthervCenter )
{
LogWrite “Datastore exsist $DestinationCluster in destination vCenter $DestinationVC “
$destinationDatastore = $DatastoreExistinOthervCenter }
Else
{
LogWrite “Datastore does not exsist in $DestinationCluster destination vCenter $DestinationVC”
# Select DataStore with the most free space and not in maintance
$DatastoreCluster = “$DataStoreClusterPrefix”+”$DestinationCluster”
$destinationDatastore = Get-DatastoreCluster $DatastoreCluster | Get-Datastore | Where {$_.State -ne “Maintenance”} | Sort-Object -Property FreeSpaceGB -Descending | Select-Object -First 1
}
$destinationDatastoreFreeSpace = $destinationDatastore | Select Name,@{N=”FreeSpace”;E={$_.ExtensionData.Summary.FreeSpace}}
$destinationDatastoreFreeSpace = [Math]::Round(($destinationDatastoreFreeSpace.”FreeSpace” / 1GB),2)
# Select the host with the less used memory
$DestinationHost = Get-Cluster –Name $DestinationCluster –Server $DestinationVC | Get-VMhost -State Connected | Sort-Object -Property MemoryUsageGB | Select-Object -First 1
# Change Here if you have a vm with multiple Network Cards (Remove the # for the multiple nics)
if ($NetworkAdapter.Count-eq 1) {
$DestinationVMPortgroup =@()
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic1”
}
elseif ($NetworkAdapter.Count-eq 2) {
$DestinationVMPortgroup =@()
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic1”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic2”
}
elseif ($NetworkAdapter.Count-eq 3) {
$DestinationVMPortgroup =@()
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic1”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic2”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic3”
}
elseif ($NetworkAdapter.Count-eq 4) {
$DestinationVMPortgroup =@()
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic1”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic2”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic3”
$DestinationVMPortgroup += Get-VirtualPortGroup -Server $DestinationVC -Vmhost $DestinationHost | Out-GridView -OutputMode Single -Title “Select Nic4”
}
LogWrite “Start move: $vm”
Logwrite “VM IP: $vmip”
Logwrite “VM Disk Used (GB): $VMHDDSize”
Logwrite “VM Folder: $vmfolder”
Logwrite “Source vCenter: $SourceVC”
Logwrite “VM Source Cluster: $SourceCluster”
Logwrite “Destination vCenter: $DestinationVC”
Logwrite “VM Destination Cluster: $DestinationCluster”
Logwrite “Destination host: $DestinationHost”
LogWrite “VM Source PortGroup: $SourceVMPortGroup”
LogWrite “VM Destination Portgroup: $DestinationVMPortgroup”
Logwrite “VM Destination Datastore: $destinationDatastore”
LogWrite “Destination Datastore FreeSpace GB: $destinationDatastoreFreeSpace “
if ( $Dryrun ) {
$FreespaceAfterMigration = $destinationDatastoreFreeSpace – $VMHDDSize
if ( $FreespaceAfterMigration -lt 0 ) { Logwrite “ERROR: Datastore $destinationDatastore does not have sufficient freespace! Virtual Machine needs $VMHDDSize. Only $destinationDatastoreFreeSpace available.” }
else { Logwrite “Virtual Machine will fit on datastore $destinationDatastore. Freespace after migration is: $FreespaceAfterMigration GB” }
}
#Test if VM responsed to ping
if ($vmip -eq $null) {
LogWrite “Virtual Machine ip address not known”
Logwrite “No ping check will be performed after moving the Virtual Machine”
}
else {
Test-Connection -comp $vmip -quiet
LogWrite “Virtual Machine $vm response to ping before being moved. Virtual machine will be checked after being moved”
$PingVM = $true
}
#if ( $VMHDDSize -eq
if ( -NOT $Dryrun) {
#Migrate VM to cluster
LogWrite “Move $vm to vCenter $DestinationVC and datastore $DestinationDatastore”
Try {
$Result = Move-VM -VM $vm `
-Destination $DestinationHost `
-Datastore $DestinationDatastore `
-NetworkAdapter $NetworkAdapter `
-PortGroup $DestinationVMPortgroup `
-ErrorAction Stop
}
Catch {
$ErrorMessage = $_.Exception.Message
LogWrite “ERROR: Move of $vm to cluster $DestinationHost failed!!!”
Logwrite “ERROR: Move Status Code: $ErrorMessage”
SendWhatsApp “ERROR: Move of $vm failed!!! $ErrorMessage”
$MigError = $true
}
#Migrate VM to folder
LogWrite “Move $vm to vCenter $vmfolder”
Try {
$VMtemp = get-vm $vm
$Result = Move-VM -VM $vmtemp -InventoryLocation $vmfolder -ErrorAction Stop
}
Catch {
$ErrorMessage = $_.Exception.Message
LogWrite “ERROR: Move of $vm to folder $vmfolder failed!!!”
Logwrite “ERROR: Move Status Code: $ErrorMessage”
SendWhatsApp “ERROR: Move of $vm failed!!! $ErrorMessage”
$MigError = $true
}
}
$MigError = $false
#Test if VM is running on destination cluster
if ( -NOT $MigError -AND -NOT $Dryrun ) {
LogWrite “Check $vm is registered in $DestinationVC”
try {
$CheckVM = get-vm -name $vm -server $DestinationVC -ErrorAction Stop
if ( $CheckVM ) {
Logwrite “$vm registered in $DestinationVC”
}
else {
Logwrite “ERROR: $vm not found in $DestinationVC”
}
}
catch {
$ErrorMessage = $_.Exception.Message
Logwrite “ERROR: $vm not found in $DestinationVC”
Logwrite “ERROR: $ErrorMessage”
SendWhatsApp “ERROR move: $vm not found in $DestinationVC”
}
}
#Test is VM response to ping, if $PingVM = $True
if ($PingVM) {
if (Test-Connection -comp $vmip -quiet) {
LogWrite “Virtual Machine $vm response to ping after move”
SendWhatsApp “Virtual Machine $vm response to ping after move”
}
}
sleep 1
SendWhatsApp “Finished move action: $vm from $SourceVC to $DestinationVC”
Logwrite “Finished move action: $vm from $SourceVC to $DestinationVC”
if ($DRSRecommendation)
{
Get-DrsRecommendation -Cluster $DestinationCluster -Server $DestinationVC | Apply-DrsRecommendation
Logwrite “DRS Recommendatation applyed”
}
Else
{
Logwrite “No DRS Recommendatation applyed”
Write-Host “No DRS Recommendatation applyed”
}
#Disconnect from vCenter servers
Logwrite “Disconnect from vCenter servers $SourceVC $DestinationVC”
Disconnect-viserver $SourceVC -Confirm:$false
Disconnect-viserver $DestinationVC -Confirm:$false
Logwrite “Finished moving virtual machines, exiting…..”
SendWhatsApp “Finished moving virtual machines, exiting…..”
VMware vSphere 6.7
VMware is announcing vSphere 6.7, the latest release of the industry-leading virtualization and cloud platform. vSphere 6.7 is the efficient and secure platform for hybrid clouds, fueling digital transformation by delivering simple and efficient management at scale, comprehensive built-in security, a universal application platform, and seamless hybrid cloud experience.
vSphere 6.7 delivers key capabilities to enable IT organizations address the following notable trends that are putting new demands on their IT infrastructure:
- Explosive growth in quantity and variety of applications, from business critical apps to new intelligent workloads.
- Rapid growth of hybrid cloud environments and use cases.
- On-premises data centers growing and expanding globally, including at the Edge.
- Security of infrastructure and applications attaining paramount importance.
Let’s take a look at some of the key capabilities in vSphere 6.7:
Simple and Efficient Management, at Scale
vSphere 6.7 builds on the technological innovation delivered by vSphere 6.5, and elevates the customer experience to an entirely new level. It provides exceptional management simplicity, operational efficiency, and faster time to market, all at scale.
vSphere 6.7 delivers an exceptional experience for the user with an enhancedvCenter Server Appliance (vCSA). It introduces several new APIs that improve the efficiency and experience to deploy vCenter, to deploy multiple vCenters based on a template, to make management of vCenter Server Appliance significantly easier, as well as for backup and restore. It also significantly simplifies the vCenter Server topology through vCenter with embedded platform services controller in enhanced linked mode, enabling customers to link multiple vCenters and have seamless visibility across the environment without the need for an external platform services controller or load balancers.
Moreover, with vSphere 6.7 vCSA delivers phenomenal performance improvements (all metrics compared at cluster scale limits, versus vSphere 6.5):
- 2X faster performance in vCenter operations per second
- 3X reduction in memory usage
- 3X faster DRS-related operations (e.g. power-on virtual machine)
These performance improvements ensure a blazing fast experience for vSphere users, and deliver significant value, as well as time and cost savings in a variety of use cases, such as VDI, Scale-out apps, Big Data, HPC, DevOps, distributed cloud native apps, etc.
vSphere 6.7 improves efficiency at scale when updating ESXi hosts, significantly reducing maintenance time by eliminating one of two reboots normally required for major version upgrades (Single Reboot). In addition to that, vSphere Quick Boot is a new innovation that restarts the ESXi hypervisor without rebooting the physical host, skipping time-consuming hardware initialization.
Another key component that allows vSphere 6.7 to deliver a simplified and efficient experience is the graphical user interface itself. The HTML5-based vSphere Client provides a modern user interface experience that is both responsive and easy to use. With vSphere 6.7, it includes added functionality to support not only the typical workflows customers need but also other key functionality like managing NSX, vSAN, VUM as well as third-party components.
Comprehensive Built-In Security
vSphere 6.7 builds on the security capabilities in vSphere 6.5 and leverages its unique position as the hypervisor to offer comprehensive security that starts at the core, via an operationally simple policy-driven model.
vSphere 6.7 adds support for Trusted Platform Module (TPM) 2.0 hardware devices and also introduces Virtual TPM 2.0, significantly enhancing protection and assuring integrity for both the hypervisor and the guest operating system. This capability helps prevent VMs and hosts from being tampered with, prevents the loading of unauthorized components and enables guest operating system security features security teams are asking for.
Data encryption was introduced with vSphere 6.5 and very well received. With vSphere 6.7, VM Encryption is further enhanced and more operationally simple to manage. vSphere 6.7 simplifies workflows for VM Encryption, designed to protect data at rest and in motion, making it as easy as a right-click while also increasing the security posture of encrypting the VM and giving the user a greater degree of control to protect against unauthorized data access.
vSphere 6.7 also enhances protection for data in motion by enabling encrypted vMotion across different vCenter instances as well as versions, making it easy to securely conduct data center migrations, move data across a hybrid cloud environment (between on-premises and public cloud), or across geographically distributed data centers.
vSphere 6.7 introduces support for the entire range of Microsoft’s Virtualization Based Security technologies. This is a result of close collaboration between VMware and Microsoft to ensure Windows VMs on vSphere support in-guest security features while continuing to run performant and secure on the vSphere platform.
vSphere 6.7 delivers comprehensive built-in security and is the heart of a secure SDDC. It has deep integration and works seamlessly with other VMware products such as vSAN, NSX and vRealize Suite to provide a complete security model for the data center.
Universal Application Platform
vSphere 6.7 is a universal application platform that supports new workloads (including 3D Graphics, Big Data, HPC, Machine Learning, In-Memory, and Cloud-Native) as well as existing mission critical applications. It also supports and leverages some of the latest hardware innovations in the industry, delivering exceptional performance for a variety of workloads.
vSphere 6.7 further enhances the support and capabilities introduced for GPUs through VMware’s collaboration with Nvidia, by virtualizing Nvidia GPUs even for non-VDI and non-general-purpose-computing use cases such as artificial intelligence, machine learning, big data and more. With enhancements to Nvidia GRID™ vGPU technology in vSphere 6.7, instead of having to power off workloads running on GPUs, customers can simply suspend and resume those VMs, allowing for better lifecycle management of the underlying host and significantly reducing disruption for end-users. VMware continues to invest in this area, with the goal of bringing the full vSphere experience to GPUs in future releases.
vSphere 6.7 continues to showcase VMware’s technological leadership and fruitful collaboration with our key partners by adding support for a key industry innovation poised to have a dramatic impact on the landscape, which is persistent memory. With vSphere Persistent Memory, customers using supported hardware modules, such as those available from Dell-EMC and HPE, can leverage them either as super-fast storage with high IOPS, or expose them to the guest operating system as non-volatile memory. This will significantly enhance performance of the OS as well as applications across a variety of use cases, making existing applications faster and more performant and enabling customers to create new high-performance applications that can leverage vSphere Persistent Memory.
Seamless Hybrid Cloud Experience
With the fast adoption of vSphere-based public clouds through VMware Cloud Provider Program partners, VMware Cloud on AWS, as well as other public cloud providers, VMware is committed to delivering a seamless hybrid cloud experience for customers.
vSphere 6.7 introduces vCenter Server Hybrid Linked Mode, which makes it easy and simple for customers to have unified visibility and manageability across an on-premises vSphere environment running on one version and a vSphere-based public cloud environment, such as VMware Cloud on AWS, running on a different version of vSphere. This ensures that the fast pace of innovation and introduction of new capabilities in vSphere-based public clouds does not force the customer to constantly update and upgrade their on-premises vSphere environment.
vSphere 6.7 also introduces Cross-Cloud Cold and Hot Migration, further enhancing the ease of management across and enabling a seamless and non-disruptive hybrid cloud experience for customers.
As virtual machines migrate between different data centers or from an on-premises data center to the cloud and back, they likely move across different CPU types. vSphere 6.7 delivers a new capability that is key for the hybrid cloud, called Per-VM EVC. Per-VM EVC enables the EVC (Enhanced vMotion Compatibility) mode to become an attribute of the VM rather than the specific processor generation it happens to be booted on in the cluster. This allows for seamless migration across different CPUs by persisting the EVC mode per-VM during migrations across clusters and during power cycles.
Previously, vSphere 6.0 introduced provisioning between vCenter instances. This is often called “cross-vCenter provisioning.” The use of two vCenter instances introduces the possibility that the instances are on different release versions. vSphere 6.7 enables customers to use different vCenter versions while allowing cross-vCenter, mixed-version provisioning operations (vMotion, Full Clone and cold migrate) to continue seamlessly. This is especially useful for customers leveraging VMware Cloud on AWS as part of their hybrid cloud.
Learn More
As the ideal, efficient, secure universal platform for hybrid cloud, supporting new and existing applications, serving the needs of IT and the business, vSphere 6.7 reinforces your investment in VMware. vSphere 6.7 is one of the core components of VMware’s SDDC and a fundamental building block of your cloud strategy. With vSphere 6.7, you can now run, manage, connect, and secure your applications in a common operating environment, across your hybrid cloud.
This article only touched upon the key highlights of this release, but there are many more new features. To learn more about vSphere 6.7, please see the following resources.
Exchange 2016/2013/2010 Updates March 2017
Today, the Exchange Team released the March updates for Exchange Server 2013 and 2016, as well as Exchange Server 2010 and 2007. The latter will receive its last update, as Exchange 2007 will reach end-of-life April 11, 2017.
As announced in December updates, Exchange 2013 CU16 and Exchange 2016 CU5 require .NET 4.6.2. The recommended upgrade paths:
- If you are still on .NET 4.6.1, you can upgrade to .NET 4.6.2 prior of after installing the latest Cumulative Update.
- If you are on .NET 4.52, upgrade to Exchange 2016 CU4 or Exchange 2013 CU15 if you are not already on that level, then upgrade to .NET 4.6.2, and finally upgrade to the the latest Cumulative Update.
The Cumulative Updates also include DST changes, which is also contained in the latest Rollups published for Exchange 2010 and 2007.
For a list of fixes in these updates, see below.
Exchange 2016 CU5 |
15.1.845.34 |
|||
Exchange 2013 CU16 |
15.0.1293.2 |
|||
Exchange 2010 SP3 Rollup 17 |
14.3.352.0 |
|||
Exchange 2007 SP3 Rollup 23 |
8.3.517.0 |
Exchange 2016 CU5 fixes:
- KB4015665 SyncDelivery logging folders and files are created in wrong location in Exchange Server 2016
- KB4015664 A category name that has different case-sensitivity than an existing name is not created in Exchange Server 2016
- KB4015663 “The message content has become corrupted” exception when email contains a UUE-encoded attachment in Exchange Server 2016
- KB4015662 Deleted inline picture is displayed as attachment after you switch the message to plain text in Exchange Server 2016
- KB4015213 Email is still sent to Inbox when the sender is deleted from the Trusted Contacts list in Exchange Server 2016
- KB4013606 Search fails on Exchange Server 2016 or Exchange Server 2013
- KB4012994 PostalAddressIndex element isn’t returning the correct value in Exchange Server 2016
Exchange 2013 CU16 fixes:
- KB4013606 Search fails on Exchange Server 2016 or Exchange Server 2013
- Exchange 2010 Rollup 17 fixes:
- KB 4014076 Migration ends and errors reported when you on-board or off-board a mailbox through Exchange Online in an Exchange Server 2010 hybrid environment
- KB 4014075 UNC path does not open in OWA when the path contains non-ASCII characters in an Exchange Server 2010 environment
- KB 4013917 You cannot search in a shared mailbox through OWA in an Exchange Server 2010 Service Pack 3 (Update Rollup 15 or 16) environment
- KB 4012911 Culture element is added in the wrong order when you use the ResolveNames operation in EWS in Exchange Server 2010
Notes:
Exchange 2016 CU5 doesn’t include schema changes, however, Exchange 2016 CU5 as well as Exchange 2013 CU16 may introduce RBAC changes in your environment. Where applicable, use setup /PrepareSchema to update the schema or /PrepareAD to apply RBAC changes, before deploying or updating Exchange servers. To verify this step has been performed, consult the Exchange schema overview.
When upgrading your Exchange 2013 or 2016 installation, don’t forget to put the server in maintenance mode when required. Do note that upgrading, before installing the Exchange binaries, setup will put the server in server-wide offline-mode.
Using Windows Management Framework (WMF)/PowerShell version 5 on anything earlier than Windows Server 2016 is not supported. Don’t install WMF5 on your Exchange servers running on Windows Server 2012 R2 or earlier.
When using Exchange hybrid deployments or Exchange Online Archiving (EOA), you are allowed to stay at least one version behind (n-1).
- If you want to speed up the update process for systems without internet access, you can follow the procedure described here to disable publisher’s certificate revocation checking.
- Cumulative Updates can be installed directly, i.e. no need to install RTM prior to installing Cumulative Updates.
- Once installed, you can’t uninstall a Cumulative Update nor any of the installed Exchange server roles.
- The order of upgrading servers with Cumulative Updates is irrelevant.
Caution: As for any update, I recommend to thoroughly test updates in a test environment prior to implementing them in production. When you lack such facilities, hold out a few days and monitor the comments on the original publication or forums for any issues.
Exchange 2007 reaches end of life on April 11
On April 11, 2017, Exchange Server 2007 will reach End of Life. If you haven’t already begun your migration from Exchange 2007 to Office 365 or Exchange 2016, you need to start planning now.
End of life means that Microsoft will no longer provide the following for Exchange 2007:
- Free or paid assisted support (including custom support agreements)
- Bug fixes for issues that are discovered and that may impact the stability and usability of the server
- Security fixes for vulnerabilities that are discovered and that may make the server vulnerable to security breaches
- Time zone updates
Your installation of Exchange 2007 will continue to run after this date. However, because of the changes listed above, we strongly recommend that you migrate from Exchange 2007 as soon as possible.
To learn about your options for migrating from Exchange 2007 to Office 365 or a newer version of Exchange Server, check out Exchange 2007 End of Life Roadmap.
Cumulative Update 2 for Exchange Server 2016
.Net 4.6.1 Support
Support for .Net 4.6.1 is now available for Exchange Server 2016 and 2013 with these updates. We fully support customers upgrading servers running 4.5.2 to 4.6.1 without removing Exchange. We recommend that customers apply Exchange Server 2016 Cumulative Update 2 or Exchange Server 2013 Cumulative Update 13 before upgrading .Net FrameWork. Servers should be placed in maintenance mode during the upgrade as you would do when applying a Cumulative Update. Support for .Net 4.6.1 requires the following post release fixes for .Net as well.
- Windows Server 2008/2008R2 – KB3146716
- Windows Server 2012 – KB3146714
- Windows Server 2012R2 – KB3146715
Note: .Net 4.6.1 installation replaces the existing 4.5.2 installation. If you attempt to roll back the .Net 4.6.1 update, you will need to install .Net 4.5.2 again.
AutoReseed Support for BitLocker
Beginning with Exchange 2013 CU13 and Exchange 2016 CU2, the Disk Reclaimer function within AutoReseed supports BitLocker. By default, this feature is disabled. For more information on how to enable this functionality, please seeEnabling BitLocker on Exchange Servers.
SHA-2 Support for Self-Signed Certificates
The New-ExchangeCertificate cmdlet has been updated to produce a SHA-2 certificate for all self-signed certificates created by Exchange. Creating a SHA-2 certificate is the default behaviour for the cmdlet. Existing certificates will not automatically be regenerated but newly installed servers will receive SHA-2 certificates by default. Customers may opt to replace existing non-SHA2 certificates generated by previous releases as they see fit.
Migration to Modern Public Folder Resolved
The issue reported in KB3161916 has been resolved.
This cumulative update fixes the following issues:
- KB 3171162 You cannot search emails in Outlook or Outlook Web App in an Exchange Server 2016 Cumulative Update 1 environment
- KB 3164346 Cannot connect to a mailbox when MAPI over HTTP protocol is used in an on-premises Exchange Server 2016 installation
- KB 3162968 “Failed to load script” error when you log on to OWA and select a language
This cumulative update also fixes the issues that are described in the KB 3160339 MS16-079: Security update for Microsoft Exchange: June 14, 2016 and KB 3134844 Cumulative Update 1 for Exchange Server 2016
Microsoft Knowledge Base articles.
This update also includes new daylight saving time (DST) updates for Exchange Server 2016. For more information about DST, go to Daylight Saving Time Help and Support Center.
Download: https://www.microsoft.com/en-us/download/details.aspx?id=52968
Cumulative Update 1 for Exchange Server 2016
Exchange Team released: Cumulative Update 1 for Exchange Server 2016
Issues that the cumulative update fixes
KB 3139730 Edge Transport service crashes when you view the properties of a poison message in Exchange Server 2016
KB 3135689 A custom SAP ODI URI is removed by ActiveSync from an email message in an Exchange Server environment
KB 3135688 Preserves the web.config file for Outlook Web App when you apply a cumulative update in Exchange Server 2016
KB 3135601 Cyrillic characters are displayed as question marks when you run the “Export-PublicFolderStatistics.ps1” script in an Exchange Server 2016 environment
KB 3124242 Mailbox quota is not validated during migration to Exchange Server 2013 or Exchange Server 2016
Exchange Server 2016 Cumulative Update 1 (KB3134844), Download, UM Lang Packs
Cumulative Update 12 for Exchange Server 2013
Exchange team released CU12 for Exchange 2013
Issues that this cumulative update fixes:
- KB 3138644 Messages are stuck in the Submission queue until NDRs are returned or the server is restarted
- KB 3137585 OAuth authentication fails in a proxy scenario between Exchange Server 2013 hybrid on-premises and Office 365
- KB 3137581 An eDiscovery search of all mailboxes or some Distribution Groups fails when you use the Exchange Administration Center
- KB 3137390 “DeviceId cannot contain hyphens” warning occurs when you use the Exchange Management Shell or the Exchange Administration Center to remove the associations in Exchange Server
- KB 3137384 Error occurs when you remove an ActiveSync device in the Exchange Management Shell or from the Exchange Administration Center
- KB 3137383 CafeLocalProbe fails if the Health Mailbox UPN doesn’t match its Active Directory domain name
- KB 3137380 Both read receipts and Non-read receipts are generated when an email is read through IMAP or POP in Exchange Server 2013
- KB 3137377 MSExchange FrontEnd Transport service crashes when email messages are processed that contain a null “X-OriginatorOrg” message header
- KB 3136694 Calendar items are not synced correctly when you use Exchange ActiveSync on a mobile device
- KB 3136404 Searching by Furigana in Outlook’s address book is unsuccessful in an Exchange Server 2013 environment
- KB 3135689 A custom SAP ODI URI is removed by ActiveSync from an email message in an Exchange Server environment
- KB 3135334 Cannot set Title in Exchange Admin Center (ECP) if it contains more than 64 characters
- KB 3135269 Event ID 4999 with MSExchangerepl.exe and MSExchangeDagMgmt.exe crash in Exchange Server 2013 environment
- KB 3135018 Cannot remove devices when the DeviceType property includes a forward slash
- KB 3134952 EdgeTransport.exe crashes when you view details of messages in the poison message queue
- KB 3134918 An IRM-protected message sent to an external contact isn’t returned in a search or discovery results when journaling is implemented in an Exchange Server 2013 environment
- KB 3134894 The “Search-Mailbox” cmdlet together with the “Attachment” property keyword lists all items that contain the query string of “attachment”
- KB 3128706 HttpProxy overloads a downlevel Client Access Server in an Exchange Server 2013 co-existence environment
- KB 3124248 Managed Availability responders fail because of invalid WindowsService names in an Exchange Server 2013 environment
- KB 3124242 Mailbox quota is not validated during migration to Exchange Server 2013 or Exchange Server 2016
- KB 3124064 Event ID 1009 is logged and no Health Manager alerts on failed content indexes during migration in Exchange Server 2013
- KB 3118902 Resource Booking Assistant doesn’t update the subject of a recurring meeting in Exchange Server 2013
- KB 3109539 Exchange Management Shell doesn’t return the correct number of Exchange Server 2013 Enterprise CALs license
- KB 3108415 Logon for POP3 client disconnects randomly in an Exchange Server 2013 environment
- KB 3106236 The “Export-PublicFolderStatistics.ps1” cmdlet exports Russian (Cyrillic) characters as question marks
- KB 3098561 “Error executing child request for /owa/auth/errorFE.aspx” when you browse to /ECP in Exchange Server 2013
- Exchange Server 2013 Cumulative Update 12 (KB3108023), Download, UM Lang Packs
Cumulative Update 11 for Exchange Server 2013
Cumulative Update 11 for Microsoft Exchange Server 2013 was released on December 15, 2015. Several nonsecurity issues are fixed in this cumulative update or a later cumulative update for Exchange Server 2013.
This cumulative update fixes the issues that are described in the following Microsoft Knowledge Base articles:
- KB 3120594 Appointment on the Outlook calendar isn’t updated to a meeting when attendees are added
- KB 3108345 “The app couldn’t be downloaded” error occurs when you try to install an application from the Intranet in Exchange Server 2013
- KB 3108011 Error message occurs in Outlook after you change a single instance of a recurring meeting by using an iOS device
- KB 3107781 Exchange ActiveSync device doesn’t keep messages for 30 days as configured
- KB 3107379 Noderunner.exe consumes excessive CPU resources by parsing an attached document in Exchange Server 2013
- KB 3107337 Mailbox migration from Exchange Server 2007 to Exchange Server 2013 is very slow
- KB 3107291 Exception occurs when you run the Invoke-MonitoringProbe cmdlets to set probes for IMAP and POP3 in Exchange Server 2013
- KB 3107205 “Custom error module does not recognize this error” error when OWA web parts fail to load
- KB 3107174 Pages that use the People pop-up URL don’t load in Chrome when you access OWA or the Exchange Server Administration Center
- KB 3106613 Outlook Web App shows partial contacts in an Exchange Server 2013 environment
- KB 3106475 POP3 and IMAP4 are not supported to use TLS protocol 1.1 or 1.2 in Exchange Server 2013
- KB 3106421 Very long URLs in an email message do not open in OWA in Internet Explorer
- KB 3105760 Exchange Server 2016 mailbox server can be added to an Exchange Server 2013 DAG
- KB 3105690 Outlook clients that use MAPI over HTTP to connect to Microsoft Exchange Server 2013 mailboxes are intermittently disconnected
- KB 3105685 The lsass.exe process leaks an amount of handles in Exchange Server 2013
- KB 3105654 Cannot edit Inbox rules in Outlook Web App by using Chrome
- KB 3105625 ActiveSync device downloads emails while it’s in quarantine in an Exchange Server 2013 environment
- KB 3105389 WSMan-InvalidShellID error when you create remote PowerShell sessions in an Exchange Server 2013 environment
- KB 3100519 No responses are sent from a room mailbox when a booked meeting extends beyond the date you set in Exchange Server 2013
- KB 3093866 The number of search results can’t be more than 250 when you search email messages in Exchange Server 2013
- KB 3088911 Inline attachments are sent as traditional when you smart forward an HTML email in an iOS device in Exchange Server 2013
- KB 3088487 IOPS Write increase causes email delivery delays in an Exchange Server 2013 environment
- KB 3076376 IMAP clients that use Kerberos authentication protocol are continually prompted for credentials in Exchange Server 2013
- KB 3068470 “Something went wrong” error in Outlook Web App and ECP in Exchange Server 2013
- KB 3048372 Exchange Calendar items are shifted incorrectly when some Windows DST updates are applied
- KB 2968265 OWA cannot be accessed after you upgrade Exchange Server 2013
This update also includes new daylight saving time (DST) updates for Exchange Server 2013. For more information about DST, go to Daylight Saving Time Help and Support Center.
Download Cumulative Update 11 for Exchange Server 2013 (KB3099522) now.
Public Folder Migratie to Office365
Move Public Folder script from 2007/2010 to Office 365 Script created by Ward Vissers
www.wardvissers.nl
THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK
OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER
Please Select the Choice You Want
Prepare for Migration (Legacy Exchange Server
00) Add the Office 365 Domain Name
01) Take a snapshot of the original source folder structure
02) Take a snapshot of public folder statistics such as item count, size, and owner.
03) Take a snapshot of the permissions
04) Locate public folders that have a backslash in the name
05) Rename Public Folder
06) Checks the public folder migration status.
07) Set PublicFolderMigrationComplete to False
Check Office 365
08) Get-PublicFolderMigrationRequest
09) Get-Mailbox -PublicFolder
10) Get-PublicFolder
Generate CSV Files and create Public Folder Mailboxes (Legacy Exchange Server)
11) Export-PublicFolderStatistics PFSizeMap.csv
12) PublicFolderToMailboxMapGenerator PFMailboxMap.csv
Create the public folder mailboxes on Exchange Online
13) Master Public Folder Name
14) Create Public Folder Mailboxen (Check PFMailboxMap.csv)
Migrating the Public Folders
15) Export mail-enabled public folders from Active Directory
16) LegacyExchangeDN Administrator
17) LegacyExchangeDN Public Folder Server
18) External Name Outlook Anywhere
19) Set the XML file
20) Give the CSV file to start the Migration
21) Public Folder Migration Status
Lock down the public folders on the legacy Exchange server for final migration (downtime required)
22) Lock the legacy public folders for finalization
Finalize the public folder migration (downtime required)
23) Finalize the public folder migration (downtime required)
Test and unlock the public folder migration
24) Add Public Folder to Test User
25) Unlock the public folders for all other users
26) Public Folder Migration Complete (Legacy Exchange Server)
27) Public Folders Enabled Local
Final Check
28) Take a snapshot of the original source folder structure.
29) Take a snapshot of the public folder statistics such as item count, size, and owner
30) Take a snapshot of the permissions
Download: https://gallery.technet.microsoft.com/scriptcenter/Public-Folder-Migratie-to-25bd50a0
You must be logged in to post a comment.