1param([Parameter(Mandatory=$true)][string]$LabMac)
2Set-StrictMode -Version Latest
3$ErrorActionPreference = 'Stop'
4$adapter = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.MACAddress -eq $LabMac })
5if ($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)
9do {
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)
15if ($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