| 1 | param([Parameter(Mandatory=$true)][string]$LabMac) |
| 2 | Set-StrictMode -Version Latest |
| 3 | $ErrorActionPreference = 'Stop' |
| 4 | $adapter = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.MACAddress -eq $LabMac }) |
| 5 | if ($adapter.Count -ne 1) { throw 'The clone lab adapter is ambiguous.' } |
| 6 | $release = $adapter[0].ReleaseDHCPLease() |
| 7 | $result = $adapter[0].RenewDHCPLease() |
| 8 | $deadline = [DateTime]::UtcNow.AddSeconds(60) |
| 9 | do { |
| 10 | $adapter = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.MACAddress -eq $LabMac }) |
| 11 | $addresses = @($adapter[0].IPAddress | Where-Object { $_ -match '^192\.168\.77\.\d+$' -and $_ -ne '192.168.77.1' }) |
| 12 | if ($addresses.Count -eq 1) { break } |
| 13 | Start-Sleep -Milliseconds 250 |
| 14 | } while ([DateTime]::UtcNow -lt $deadline) |
| 15 | if ($addresses.Count -ne 1) { throw ('The clone did not receive a lab IPv4 address; renewal result ' + $result.ReturnValue) } |
| 16 | @{mac=$LabMac;address=$addresses[0];releaseResult=$release.ReturnValue;renewalResult=$result.ReturnValue} | ConvertTo-Json -Compress |