Private/Test-SCVirtualMachineLiveMigrationEligibility.ps1
function Test-SCVirtualMachineLiveMigrationEligibility { #Requires -Version 3.0 #Requires -Modules virtualmachinemanager [CmdletBinding()] [OutputType([System.Collections.Hashtable])] Param ( [Parameter(Mandatory)] [Microsoft.SystemCenter.VirtualMachineManager.VM]$VM, [Parameter(Mandatory)] [Microsoft.SystemCenter.VirtualMachineManager.Host]$VMHost ) $ErrorActionPreference = 'Stop' Write-Debug -Message ('ENTER {0}' -f $MyInvocation.MyCommand.Name) try { Write-Debug -Message ('ENTER TRY {0}' -f $MyInvocation.MyCommand.Name) Write-Debug -Message ('$VM: ''{0}''' -f $VM.Name) Write-Debug -Message ('$VMHost: ''{0}''' -f [string]$VMHost) $SCVMStatesPoweredDown = @( [Microsoft.VirtualManager.Utils.VMComputerSystemState]::Paused [Microsoft.VirtualManager.Utils.VMComputerSystemState]::PowerOff [Microsoft.VirtualManager.Utils.VMComputerSystemState]::Saved ) Write-Debug -Message ('$SCVMStatesPoweredDown: {0}' -f [string]$SCVMStatesPoweredDown) $SCVMStatesRunning = @( [Microsoft.VirtualManager.Utils.VMComputerSystemState]::Running ) Write-Debug -Message ('$SCVMStatesRunning: {0}' -f [string]$SCVMStatesRunning) $SCVMStatesMigrating = @( [Microsoft.VirtualManager.Utils.VMComputerSystemState]::UnderMigration ) Write-Debug -Message ('$SCVMStatesMigrating: {0}' -f [string]$SCVMStatesMigrating) Write-Debug -Message '$Result = $false' $Result = $false Write-Debug -Message ('$Result: ''{0}''' -f [string]$Result) Write-Debug -Message '$Reason = ''OK''' $Reason = 'OK' Write-Debug -Message ('$Reason = ''{0}''' -f $Reason) Write-Debug -Message '$SourceVMHost = $VM.VMHost' $SourceVMHost = $VM.VMHost Write-Debug -Message ('$SourceVMHost: ''{0}''' -f [string]$SourceVMHost) Write-Debug -Message '$DestinationVMHost = $VMHost' $DestinationVMHost = $VMHost Write-Debug -Message ('$DestinationVMHost: ''{0}''' -f [string]$DestinationVMHost) Write-Debug -Message 'Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)' Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost) $SourceVMs = Get-SCVirtualMachine -VMHost $SourceVMHost Write-Debug -Message ('$SourceVMs: ''{0}''' -f [string]$SourceVMs) $DestinationVMs = Get-SCVirtualMachine -VMHost $DestinationVMHost Write-Debug -Message ('$DestinationVMs: ''{0}''' -f [string]$DestinationVMs) Write-Debug -Message ('$VM.Status: ''{0}''' -f $VM.Status) Write-Debug -Message 'if ($VM -notin $SourceVMs)' if ($VM -notin $SourceVMs) { Write-Debug -Message '$Reason = ''NotFound''' $Reason = 'NotFound' } elseif ($VM -in $DestinationVMs) { Write-Debug -Message '$Reason = ''Migrated''' $Reason = 'Migrated' } elseif ($VM.Status -in $SCVMStatesMigrating) { Write-Debug -Message '$Reason = ''Migrating''' $Reason = 'Migrating' } elseif ($VM.Status -like '*Failed') { Write-Debug -Message '$Reason = ''Failed''' $Reason = 'Failed' } elseif ($VM.Status -notin $SCVMStatesRunning) { Write-Debug -Message '$Reason = ''NotRunning''' $Reason = 'NotRunning' } else { Write-Debug -Message '$SCVMIsBackingUp = Test-SCVirtualMachineBackingUpStatus -VM $VM' $SCVMIsBackingUp = Test-SCVirtualMachineBackingUpStatus -VM $VM Write-Debug -Message ('$SCVMIsBackingUp: ''{0}''' -f [string]$SCVMIsBackingUp) Write-Debug -Message 'if ($SCVMIsBackingUp)' if ($SCVMIsBackingUp) { Write-Debug -Message '$Reason = ''BackingUp''' $Reason = 'BackingUp' } else { Write-Debug -Message '$Result = $true' $Result = $true } } Write-Debug -Message ('$Reason = ''{0}''' -f $Reason) Write-Debug -Message ('$Result: ''{0}''' -f [string]$Result) Write-Debug -Message ('@{{Result = {0}}}; $Reason = ''{1}''; Status = ''{2}''' -f [string]$Result, $Reason, [string]$VM.Status) @{ Result = $Result Reason = $Reason Status = $VM.Status } Write-Debug -Message ('EXIT TRY {0}' -f $MyInvocation.MyCommand.Name) } catch { Write-Debug -Message ('ENTER CATCH {0}' -f $MyInvocation.MyCommand.Name) Write-Debug -Message ('{0}: $PSCmdlet.ThrowTerminatingError($_)' -f $MyInvocation.MyCommand.Name) $PSCmdlet.ThrowTerminatingError($_) Write-Debug -Message ('EXIT CATCH {0}' -f $MyInvocation.MyCommand.Name) } Write-Debug -Message ('EXIT {0}' -f $MyInvocation.MyCommand.Name) } |