Skip to content

Commit e043ae5

Browse files
committed
Merge branch 'dev' into 'master'
Release 1.1.4 See merge request fozzy-winadmins/SCVMReliableMigration!11
2 parents 40eba0b + a940d37 commit e043ae5

File tree

5 files changed

+179
-21
lines changed

5 files changed

+179
-21
lines changed

Public/Move-SCPoweredDownVirtualMachine.ps1

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function Move-SCPoweredDownVirtualMachine {
5353
Write-Debug -Message ('$SetSCVirtualNetworkAdapterArguments = @{{VirtualNetworkAdapter = $VMNetworkAdapter, JobGroup = ''{0}''}}' -f $JobGroupId)
5454
$SetSCVirtualNetworkAdapterArguments = @{
5555
VirtualNetworkAdapter = $VMNetworkAdapter
56-
JobGroup = $JobGroupId
56+
JobGroup = $JobGroupId
5757
}
5858
Write-Debug -Message ('$SetSCVirtualNetworkAdapterArguments: ''{0}''' -f ($SetSCVirtualNetworkAdapterArguments | Out-String))
5959

@@ -109,10 +109,23 @@ function Move-SCPoweredDownVirtualMachine {
109109
$null = Move-SCVirtualMachine -VM $VM -VMHost $DestinationVMHost -Path $Path -JobGroup $JobGroupId
110110
}
111111
catch {
112-
Write-Debug -Message ($_)
113-
Write-Debug -Message ('Exception.HResult: {0}' -f $_.Exception.HResult)
114-
Write-Debug -Message 'return'
115-
return
112+
Write-Debug -Message 'Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)'
113+
Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)
114+
Write-Debug -Message '$null = Read-SCVirtualMachine -VM $SCVM'
115+
$null = Read-SCVirtualMachine -VM $SCVM
116+
Write-Debug -Message ('$VM.VMHost: {0}' -f [string]$VM.VMHost)
117+
Write-Debug -Message ('$DestinationVMHost: {0}' -f [string]$DestinationVMHost)
118+
Write-Debug -Message 'if ($VM.VMHost -eq $DestinationVMHost)'
119+
if ($VM.VMHost -eq $DestinationVMHost) {
120+
Write-Debug -Message 'continue'
121+
continue
122+
}
123+
else {
124+
Write-Debug -Message ($_)
125+
Write-Debug -Message ('Exception.HResult: {0}' -f $_.Exception.HResult)
126+
Write-Debug -Message ('{0}: Throw $_' -f $MyInvocation.MyCommand.Name)
127+
throw $_
128+
}
116129
}
117130

118131
Write-Debug -Message ('$HVACL: ''{0}''' -f [string]$HVACL)
@@ -170,8 +183,8 @@ function Move-SCPoweredDownVirtualMachine {
170183
catch {
171184
Write-Debug -Message ('ENTER CATCH {0}' -f $MyInvocation.MyCommand.Name)
172185

173-
Write-Debug -Message ('{0}: $PSCmdlet.ThrowTerminatingError($_)' -f $MyInvocation.MyCommand.Name)
174-
$PSCmdlet.ThrowTerminatingError($_)
186+
Write-Debug -Message ('{0}: Throw $_' -f $MyInvocation.MyCommand.Name)
187+
throw $_
175188

176189
Write-Debug -Message ('EXIT CATCH {0}' -f $MyInvocation.MyCommand.Name)
177190
}

Public/Move-SCVirtualMachineReliably.ps1

Lines changed: 104 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ function Move-SCVirtualMachineReliably {
4242
[switch]$Bulletproof,
4343
[Parameter(ParameterSetName = 'ByHost')]
4444
[Parameter(ParameterSetName = 'ByVM')]
45-
[switch]$CrashOnUnmigratable
45+
[switch]$CrashOnUnmigratable,
46+
[Parameter(ParameterSetName = 'ByHost')]
47+
[Parameter(ParameterSetName = 'ByVM')]
48+
[switch]$ReturnSourceVMs
4649
)
4750

4851
$ErrorActionPreference = 'Stop'
@@ -63,7 +66,8 @@ function Move-SCVirtualMachineReliably {
6366
Write-Debug -Message ('$VM: ''{0}''' -f [string]$VM.Name)
6467
Write-Debug -Message ('$BackupThreshold: ''{0}''' -f [string]$BackupThreshold)
6568
Write-Debug -Message ('$Bulletproof: ''{0}''' -f [string]$Bulletproof)
66-
Write-Debug -Message ('$CrashOnUnmigratable: ''{0}''' -f [string]$CrashOnUnmigratable)
69+
Write-Debug -Message ('$CrashOnUnmigratable = ${0}' -f $CrashOnUnmigratable)
70+
Write-Debug -Message ('$ReturnSourceVMs = ${0}' -f $ReturnSourceVMs)
6771

6872
Write-Debug -Message 'if ($VM)'
6973
if ($VM) {
@@ -141,26 +145,52 @@ function Move-SCVirtualMachineReliably {
141145
}
142146
Write-Debug -Message ('$LiveMigrationMaximum = {0}' -f $LiveMigrationMaximum)
143147

148+
Write-Debug -Message ('$ReturnSourceVMs = ${0}' -f $ReturnSourceVMs)
149+
Write-Debug -Message ('if ($ReturnSourceVMs)')
150+
if ($ReturnSourceVMs) {
151+
Write-Debug -Message '$FirstRun = $true'
152+
$FirstRun = $true
153+
Write-Debug -Message ('$FirstRun = ${0}' -f $FirstRun)
154+
}
155+
144156
do {
145157
Write-Debug -Message ('$PsCmdlet.ParameterSetName: ''{0}''' -f $PsCmdlet.ParameterSetName)
146158
switch ($PsCmdlet.ParameterSetName) {
147159
'ByHost' {
160+
Write-Debug -Message '$Filter = {$_ -notin $UnmigratableVMs}'
148161
$Filter = {$_ -notin $UnmigratableVMs}
149162
}
150163
'ByVM' {
164+
Write-Debug -Message '$Filter = {$_ -in $VM -and $_ -notin $UnmigratableVMs}'
151165
$Filter = {$_ -in $VM -and $_ -notin $UnmigratableVMs}
152166
}
153167
}
154-
Write-Debug -Message ('$Filter = ''{0}''' -f $Filter)
168+
Write-Debug -Message ('$Filter = {{{0}}}' -f $Filter)
155169

156170
Write-Debug -Message 'Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)'
157171
Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)
158172

159-
Write-Debug -Message '$SourceSCVMs = Get-SCVirtualMachine -VMHost $SourceVMHost | Where-Object -FilterScript'
173+
Write-Debug -Message ('$SourceSCVMs = Get-SCVirtualMachine -VMHost $SourceVMHost | Where-Object -FilterScript {{{0}}}' -f $Filter)
160174
$SourceSCVMs = Get-SCVirtualMachine -VMHost $SourceVMHost | Where-Object -FilterScript $Filter # Getting those VMs of which we care about
161175
Write-Debug -Message ('$SourceSCVMs: ''{0}''' -f [string]$SourceSCVMs.Name)
176+
162177
Write-Debug -Message 'if ($SourceSCVMs)'
163178
if ($SourceSCVMs) {
179+
Write-Debug -Message ('$ReturnSourceVMs = ${0}' -f $ReturnSourceVMs)
180+
Write-Debug -Message ('if ($ReturnSourceVMs)')
181+
if ($ReturnSourceVMs) {
182+
Write-Debug -Message ('$FirstRun = ${0}' -f $FirstRun)
183+
Write-Debug -Message 'if ($FirstRun)'
184+
if ($FirstRun) {
185+
Write-Debug -Message '$SourceVMsOriginal = $SourceSCVMs.Clone()'
186+
$SourceVMsOriginal = $SourceSCVMs.Clone()
187+
Write-Debug -Message ('$SourceVMsOriginal: ''{0}''' -f [string]$SourceVMsOriginal.Name)
188+
Write-Debug -Message '$FirstRun = $false'
189+
$FirstRun = $false
190+
Write-Debug -Message ('$FirstRun = ${0}' -f $FirstRun)
191+
}
192+
}
193+
164194
Write-Debug -Message '$SourceSCVMsMigrating = $SourceSCVMs | Where-Object -FilterScript {$_.Status -in $SCVMStatesMigrating}'
165195
$SourceSCVMsMigrating = $SourceSCVMs | Where-Object -FilterScript {$_.Status -in $SCVMStatesMigrating}
166196
Write-Debug -Message ('$SourceSCVMsMigrating: ''{0}''' -f [string]$SourceSCVMsMigrating.Name)
@@ -210,10 +240,10 @@ function Move-SCVirtualMachineReliably {
210240

211241
Write-Debug -Message '$SourceVMHostVMs = Get-SCVirtualMachine -VMHost $SourceVMHost'
212242
$SourceVMHostVMs = Get-SCVirtualMachine -VMHost $SourceVMHost
213-
Write-Debug -Message ('$SourceVMHostVMs: ''{0}''' -f [string]$SourceSCVMsNotMigratingRunning.Name)
243+
Write-Debug -Message ('$SourceVMHostVMs: ''{0}''' -f [string]$SourceVMHostVMs.Name)
214244
Write-Debug -Message '$SourceVMHostVMs = Get-SCVirtualMachine -VMHost $DestinationVMHost'
215245
$DestinationVMHostVMs = Get-SCVirtualMachine -VMHost $DestinationVMHost
216-
Write-Debug -Message ('$DestinationVMHostVMs: ''{0}''' -f [string]$SourceSCVMsNotMigratingRunning.Name)
246+
Write-Debug -Message ('$DestinationVMHostVMs: ''{0}''' -f [string]$DestinationVMHostVMs.Name)
217247

218248
Write-Debug -Message '$SourceVMHostMigratingVMs = $SourceVMHostVMs | Where-Object -FilterScript {$_.Status -in $SCVMStatesMigrating}'
219249
$SourceVMHostMigratingVMs = $SourceVMHostVMs | Where-Object -FilterScript {$_.Status -in $SCVMStatesMigrating}
@@ -273,10 +303,15 @@ function Move-SCVirtualMachineReliably {
273303

274304
Write-Debug -Message 'if ($SCVirtualMachineLiveMigrationEligibility.Result -or $SCVirtualMachineLiveMigrationEligibility.Reason -eq ''NotRunning'')'
275305
if ($SCVirtualMachineLiveMigrationEligibility.Result -or $SCVirtualMachineLiveMigrationEligibility.Reason -eq 'NotRunning') {
306+
Write-Debug -Message '$VMMigrationRetryInfoCount = ($VMMigrationRetryInfo | Where-Object -FilterScript {$_ -eq $SCVM}).Count'
276307
$VMMigrationRetryInfoCount = ($VMMigrationRetryInfo | Where-Object -FilterScript {$_ -eq $SCVM}).Count
308+
Write-Debug -Message ('$VMMigrationRetryInfoCount = {0}' -f $VMMigrationRetryInfoCount)
309+
Write-Debug -Message ('$MaxAttempts = {0}' -f $MaxAttempts)
277310
Write-Debug -Message 'if ($VMMigrationRetryInfoCount -ge $MaxAttempts)'
278311
if ($VMMigrationRetryInfoCount -ge $MaxAttempts) {
279312
Write-Verbose -Message ('VM {0} is unmigratable' -f $SCVM.Name)
313+
Write-Debug -Message ('$CrashOnUnmigratable = ${0}' -f $CrashOnUnmigratable)
314+
Write-Debug -Message 'if ($CrashOnUnmigratable)'
280315
if ($CrashOnUnmigratable) {
281316
$Message = ('Tried to migrate VM {0} {1} times - did not succeed' -f $SCVM.Name, $MaxAttempts)
282317
$PSCmdlet.ThrowTerminatingError((New-Object -TypeName 'System.Management.Automation.ErrorRecord' -ArgumentList ((New-Object -TypeName 'System.ServiceModel.Channels.RetryException' -ArgumentList $Message), 'RetryException', [System.Management.Automation.ErrorCategory]::OperationTimeout, $SCVM)))
@@ -381,6 +416,8 @@ function Move-SCVirtualMachineReliably {
381416
Write-Debug -Message 'if ($CurrentDateTime -gt $BackupDateTimeThreshold)'
382417
if ($CurrentDateTime -gt $BackupDateTimeThreshold) {
383418
Write-Verbose -Message ('VM {0} is unmigratable' -f $SCVM.Name)
419+
Write-Debug -Message ('$CrashOnUnmigratable = ${0}' -f $CrashOnUnmigratable)
420+
Write-Debug -Message 'if ($CrashOnUnmigratable)'
384421
if ($CrashOnUnmigratable) {
385422
$Message = ('VM {0} is in backing up state for more than {1} already' -f $SCVM.Name, [string]$BackupThreshold)
386423
$PSCmdlet.ThrowTerminatingError((New-Object -TypeName 'System.Management.Automation.ErrorRecord' -ArgumentList ((New-Object -TypeName 'System.TimeoutException' -ArgumentList $Message), 'TimeoutException', [System.Management.Automation.ErrorCategory]::OperationTimeout, $SCVM)))
@@ -431,8 +468,32 @@ function Move-SCVirtualMachineReliably {
431468
$null = $VMMigrationRetryInfo.Add($SCVM)
432469
Write-Debug -Message ('$VMMigrationRetryInfo: ''{0}''' -f [string]$VMMigrationRetryInfo.Name)
433470
Write-Verbose -Message ('Trying to migrate a powered-down VM {0}' -f $SCVM.Name)
434-
Write-Debug -Message ('Move-SCPoweredDownVirtualMachine -VM $SCVM -VMHost $DestinationVMHost -Path ''{0}''' -f $Path)
435-
Move-SCPoweredDownVirtualMachine -VM $SCVM -VMHost $DestinationVMHost -Path $Path
471+
try {
472+
Write-Debug -Message ('Move-SCPoweredDownVirtualMachine -VM $SCVM -VMHost $DestinationVMHost -Path ''{0}''' -f $Path)
473+
Move-SCPoweredDownVirtualMachine -VM $SCVM -VMHost $DestinationVMHost -Path $Path
474+
}
475+
catch {
476+
Write-Debug -Message ('$_.InvocationInfo.MyCommand.Name: {0}' -f $_.InvocationInfo.MyCommand.Name)
477+
Write-Debug -Message 'if ($_.InvocationInfo.MyCommand.Name -eq ''Move-SCVirtualMachine'')'
478+
if ($_.InvocationInfo.MyCommand.Name -eq 'Move-SCVirtualMachine') {
479+
Write-Debug -Message 'Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)'
480+
Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)
481+
Write-Debug -Message '$null = Read-SCVirtualMachine -VM $SCVM'
482+
$null = Read-SCVirtualMachine -VM $SCVM
483+
Write-Debug -Message '$SCVirtualMachineLiveMigrationEligibility = Test-SCVirtualMachineLiveMigrationEligibility -VM $SCVM -VMHost $DestinationVMHost'
484+
$SCVirtualMachineLiveMigrationEligibility = Test-SCVirtualMachineLiveMigrationEligibility -VM $SCVM -VMHost $DestinationVMHost
485+
Write-Debug -Message ('$SCVirtualMachineLiveMigrationEligibility.Reason: ''{0}''' -f $SCVirtualMachineLiveMigrationEligibility.Reason)
486+
Write-Debug -Message 'if ($SCVirtualMachineLiveMigrationEligibility.Reason -eq ''Failed'')'
487+
if ($SCVirtualMachineLiveMigrationEligibility.Reason -eq 'Failed') {
488+
Write-Debug -Message '$null = Repair-SCVirtualMachine -VM $SCVM -Dismiss -Force'
489+
$null = Repair-SCVirtualMachine -VM $SCVM -Dismiss -Force
490+
}
491+
}
492+
else {
493+
Write-Debug -Message ('{0}: $PSCmdlet.ThrowTerminatingError($_)' -f $MyInvocation.MyCommand.Name)
494+
$PSCmdlet.ThrowTerminatingError($_)
495+
}
496+
}
436497
Write-Debug -Message '$LastVMWasPoweredDown = $true'
437498
$LastVMWasPoweredDown = $true
438499
Write-Debug -Message ('$LastVMWasPoweredDown: ''{0}''' -f [string]$LastVMWasPoweredDown)
@@ -488,6 +549,10 @@ function Move-SCVirtualMachineReliably {
488549
Write-Debug -Message 'Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost)'
489550
Read-SCVMHosts -VMHost ($SourceVMHost, $DestinationVMHost) # Make sure our VM objects are fresh
490551

552+
Write-Debug -Message '$ReturnUnmigratableVMs = $false'
553+
$ReturnUnmigratableVMs = $false
554+
Write-Debug -Message ('$ReturnUnmigratableVMs = ${0}' -f $ReturnUnmigratableVMs)
555+
491556
Write-Debug -Message ('$UnmigratableVMs: ''{0}''' -f [string]$UnmigratableVMs.Name)
492557
Write-Debug -Message 'if ($UnmigratableVMs)'
493558
if ($UnmigratableVMs) {
@@ -507,6 +572,37 @@ function Move-SCVirtualMachineReliably {
507572
Write-Debug -Message 'if ($UnmigratableVMs.Count -gt 0)'
508573
if ($UnmigratableVMs.Count -gt 0) {
509574
Write-Debug -Message ('$UnmigratableVMs: ''{0}''' -f [string]$UnmigratableVMs.Name)
575+
576+
Write-Debug -Message '$ReturnUnmigratableVMs = $true'
577+
$ReturnUnmigratableVMs = $true
578+
Write-Debug -Message ('$ReturnUnmigratableVMs = ${0}' -f $ReturnUnmigratableVMs)
579+
}
580+
}
581+
582+
Write-Debug -Message ('$ReturnUnmigratableVMs = ${0}' -f $ReturnUnmigratableVMs)
583+
Write-Debug -Message ('$UnmigratableVMs: ''{0}''' -f [string]$UnmigratableVMs.Name)
584+
Write-Debug -Message ('$ReturnSourceVMs = ${0}' -f $ReturnSourceVMs)
585+
Write-Debug -Message ('if ($ReturnSourceVMs)')
586+
if ($ReturnSourceVMs) {
587+
Write-Debug -Message ('$SourceVMsOriginal: ''{0}''' -f [string]$SourceVMsOriginal.Name)
588+
Write-Debug -Message 'if ($ReturnUnmigratableVMs)'
589+
if ($ReturnUnmigratableVMs) {
590+
Write-Debug -Message '@{SourceVMs = $SourceVMsOriginal, UnmigratableVMs = $UnmigratableVMs}'
591+
@{
592+
SourceVMs = $SourceVMsOriginal
593+
UnmigratableVMs = $UnmigratableVMs
594+
}
595+
}
596+
else {
597+
Write-Debug -Message '@{SourceVMs = $SourceVMsOriginal}'
598+
@{
599+
SourceVMs = $SourceVMsOriginal
600+
}
601+
}
602+
}
603+
else {
604+
Write-Debug -Message 'if ($ReturnUnmigratableVMs)'
605+
if ($ReturnUnmigratableVMs) {
510606
Write-Debug -Message '$UnmigratableVMs'
511607
$UnmigratableVMs
512608
}

0 commit comments

Comments
 (0)