| 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 | $enabled = $adapter[0].EnableDHCP() |
| 7 | if ($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) |
| 13 | do { |
| 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) |
| 19 | if ($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 |