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$enabled = $adapter[0].EnableDHCP()
7if ($enabled.ReturnValue -notin @(0, 1)) {
8 throw ('Unable to enable DHCP on the clone lab adapter; result ' + $enabled.ReturnValue)
9}
10$release = $adapter[0].ReleaseDHCPLease()
11$result = $adapter[0].RenewDHCPLease()
12$deadline = [DateTime]::UtcNow.AddSeconds(60)
13do {
14 $adapter = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.MACAddress -eq $LabMac })
15 $addresses = @($adapter[0].IPAddress | Where-Object { $_ -match '^192\.168\.77\.\d+$' -and $_ -ne '192.168.77.1' })
16 if ($addresses.Count -eq 1) { break }
17 Start-Sleep -Milliseconds 250
18} while ([DateTime]::UtcNow -lt $deadline)
19if ($addresses.Count -ne 1) { throw ('The clone did not receive a lab IPv4 address; renewal result ' + $result.ReturnValue + '; adapter ' + ($adapter[0] | Select-Object MACAddress,DHCPEnabled,IPEnabled,IPAddress | ConvertTo-Json -Compress)) }
20@{mac=$LabMac;address=$addresses[0];releaseResult=$release.ReturnValue;renewalResult=$result.ReturnValue} | ConvertTo-Json -Compress