# wait-for-internet.ps1 - Invoked by FlatUnattendW10-shopfloor.xml as Order 4 # during first logon, right before GCCH enrollment. Previously the logic was # inline in the unattend's CommandLine attribute but the string exceeded # Microsoft's SynchronousCommand CommandLine length limit and Windows rejected # the whole answer file with "the answer file is invalid". Moved here to keep # the unattend CommandLine short. # # Behaviour: # 1. Print a 60-second prompt asking the tech to connect to production # network. Gives tower users a window to unplug PXE cable and re-cable # to a production port; laptop users are already on WiFi and can # press any key to skip. # 2. Poll TCP 443 to login.microsoftonline.us for up to 10 minutes using # Test-NetConnection (NOT Test-Connection / ICMP - Microsoft 365 edges # do not reliably respond to ICMP, which previously caused infinite # "Waiting for internet connectivity..." loops on towers). # 3. Always exit 0 so the unattend chain proceeds even if detection times # out - enrollment will retry on its own if the network is still broken. Write-Host '' Write-Host '========================================' -ForegroundColor Yellow Write-Host ' Connect to PRODUCTION network NOW' -ForegroundColor Yellow Write-Host ' Towers: unplug PXE, plug into production' -ForegroundColor Yellow Write-Host ' Laptops: WiFi should already be connected' -ForegroundColor Yellow Write-Host '========================================' -ForegroundColor Yellow Write-Host '' Write-Host 'Auto-continuing in 60s (press any key to skip)...' -ForegroundColor Cyan $end = (Get-Date).AddSeconds(60) while ((Get-Date) -lt $end) { try { if ($Host.UI.RawUI.KeyAvailable) { $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') break } } catch {} Start-Sleep -Milliseconds 500 } Write-Host 'Waiting for internet connectivity (up to 10 min)...' $deadline = (Get-Date).AddMinutes(10) $ok = $false while ((Get-Date) -lt $deadline) { try { if (Test-NetConnection -ComputerName login.microsoftonline.us -Port 443 -InformationLevel Quiet -WarningAction SilentlyContinue) { $ok = $true break } } catch {} Start-Sleep -Seconds 5 } if ($ok) { Write-Host 'Internet connected.' -ForegroundColor Green } else { Write-Host 'Internet wait timeout - proceeding anyway.' -ForegroundColor Yellow } exit 0