While doing some testing of Autopilot while on the road, I came across a problem where, on first login for the end user, a “Something went wrong” message appeared. The error code was “caa70007”. Time to do some troubleshooting.
There are two main phases of Windows setup.
The first is where Windows PE (Preinstallation Environment) lets you choose the partition, formats the disk, and copies the software onto the disk. In the OEM scenario where you’re unboxing a new device, you don’t see this bit.
After a reboot (and, in the OEM scenario, the customer unboxing the device), comes OOBE, or the “out of box experience” as it’s known in full.
During OOBE, it is not widely known that you can press shift-F10 and get a command prompt. Very handy for doing a bit of troubleshooting.
The symptoms I was getting led me to believe that there might be something up with my internet connection.
I had an IP address and could ping Google’s 18.104.22.168 DNS server. All good.
Now, what I didn’t tell you was that I was at my local dealership waiting for my car to be serviced. So, although my laptop had been through the captive portal, I suspected that the virtual machine (with a different MAC address) might be getting caught up in all that captive portal fun.
The easiest way I found to check was to use a one-liner PowerShell command to mimic the test that Windows itself uses when joining a network to find out if there is a captive portal.
The main challenge is that we’re in OOBE. While we have a few tools, like RegEdit and Notepad, we don’t have the luxury of a web browser.
Starting Powershell using the “powershell” command works in OOBE, even though you don’t yet have a web browser.
The wget command is built in and lets us simply download the same file (http://www.msftncsi.com/ncsi.txt) that Microsoft uses to do this test.
Yes, I’m being lazy in writing a file to the root of the C: drive, but this is a test machine that’s going to get wiped later today.
Finally, “notepad c:\ncsi.txt” lets us see the text file.
Highlighted in yellow is confirmation of my suspicion. We do indeed have a captive portal.
Now, actually signing in to a captive portal with PowerShell might be a bit more of a challenge, but we’ve found the problem with a simple key-stroke and a one line of PowerShell.