PSake/psakeBuild.ps1
properties { # Importing config file . $Config } task default -depends Connection, Test, Disconnection task Connection { # Check for already open session to desired source vCenter server If ($cfg.sourcevc.vc -notin $global:DefaultVIServers.Name) { Try { # Attempt connection to vCenter, prompting for credentials Write-Verbose "No active connection found to configured vCenter '$($cfg.sourcevc.vc)'. Connecting" Connect-VIServer -Server $cfg.sourcevc.vc -user $cfg.sourcevc.user -password $cfg.sourcevc.password -ErrorAction Stop } Catch { # If unable to connect, stop Write-Error -Message 'Error while connecting to the source vCenter. Build cannot continue!' } } else { Write-Verbose "Already connected to '$($cfg.sourcevc.vc)'" } # Check for already open session to desired destination vCenter server If ($cfg.destinationvc.vc -notin $global:DefaultVIServers.Name) { Try { # Attempt connection to vCenter, prompting for credentials Write-Verbose "No active connection found to configured vCenter '$($cfg.destinationvc.vc)'. Connecting" Connect-VIServer -Server $cfg.destinationvc.vc -user $cfg.destinationvc.user -password $cfg.destinationvc.password } Catch { # If unable to connect, stop Write-Error -Message 'Error while connecting to the destination vCenter. Build cannot continue!' } } else { Write-Verbose "Already connected to '$($cfg.destinationvc.vc)'" } } task Test -depends Connection { $sourceVCConn = $global:DefaultVIServers | Where-Object {$_.Name -match $cfg.sourcevc.vc} | Select-Object -Last 1 $destVCConn = $global:DefaultVIServers | Where-Object {$_.Name -match $cfg.destinationvc.vc} | Select-Object -Last 1 $testResults = Invoke-Pester -PassThru -Script @{ Path = $Test Parameters = @{ Cfg = $cfg sourceVCConn = $sourceVCConn destVCConn = $destVCConn } } # Invoke-Pester if ($testResults.FailedCount -gt 0) { $testResults | Format-List Write-Error -Message 'One or more Pester tests failed. Build cannot continue!' } } task Migrate -depends Connection, Test { $sourceVCConn = $global:DefaultVIServers | Where-Object {$_.Name -match $cfg.sourcevc.vc} | Select-Object -Last 1 $destVCConn = $global:DefaultVIServers | Where-Object {$_.Name -match $cfg.destinationvc.vc} | Select-Object -Last 1 Write-Verbose -Message "Get list of VM from scope" $VMList = Get-Cluster $cfg.cluster.source -Server $sourceVCConn | Get-VM $cfg.vm.scope -Server $sourceVCConn Write-Verbose -Message "Execute function Move-xvCenterVM" Try { Move-xVCvMotion -Cfg $cfg -sourceVCConn $sourceVCConn -destVCConn $destVCConn -VMList $VMList -Verbose:$VerbosePreference } Catch { write-Error -Message "Build failed! $_" } } task Disconnection -depends Connection { Try { Write-Verbose -Message "Disconnection from vCenters $($cfg.sourcevc.vc),$($cfg.destinationvc.vc)" Disconnect-VIServer $cfg.sourcevc.vc,$cfg.destinationvc.vc -Confirm:$false } Catch { Write-Error -Message 'Error while disconnecting from vCenter' } } task All -depends Connection, Test, Migrate, Disconnection { return $True } |